odoo为form,tree和kanban视图同时指定view_id的方法

官方文档中提到,有两种情况我们也许会指定一个view而不是用默认的那个:

  • 一个对象有几个form或tree视图
  • 想用一个关系字段(例如o2m)来改变form或tree视图

紧接着文档介绍了priority字段:

在视图的定义中我们可以使用priority字段,它的默认值是16.默认情况下,OpenERP会使用带有最高优先级(也就是最小数字)的tree视图来显示一个model。

为实现为每种视图指定一个view,有一个model叫 ir.actions.act_window.view,我们可以使用它来完美解决问题。我们定义一个record中仅包含4个field即可:

        <record id="sunpop_action_customer_form_view1" model="ir.actions.act_window.view">
            <field name="sequence" eval="1"/>
            <field name="view_mode">kanban</field>
            <field name="view_id" ref="base.res_partner_kanban_view"/>
            <field name="act_window_id" ref="felive_action_partner_customer_form"/>
        </record>
        <record id="sunpop_action_customer_form_view2" model="ir.actions.act_window.view">
            <field name="sequence" eval="2"/>
            <field name="view_mode">tree</field>
            <field name="view_id" ref="felive_view_partner_customer_tree"/>
            <field name="act_window_id" ref="felive_action_partner_customer_form"/>
        </record>

还有一种快速写法,参考

 

        <record id="sunpop_product_variant_action" model="ir.actions.act_window">
            <field name="name">Product Variants</field>
            <field name="type">ir.actions.act_window</field>
            <field name="res_model">product.product</field>
            <field name="context">{'search_default_product_tmpl_id': [active_id], 'default_product_tmpl_id': active_id}</field>
            <field name="search_view_id" ref="felive_product_search_form_view"/>             
            <field name="view_ids" 
                   eval="[(5, 0, 0),
                          (0, 0, {'view_mode': 'tree'}),
                          (0, 0, {'view_mode': 'form', 'view_id': ref('sunpop_product_variant_easy_edit_view')}), 
                          (0, 0, {'view_mode': 'kanban'})]"/>
        </record>

更多细节,可以到官方市场搜索我们的模块

Stock Location Kanban

里面有类似的应用,将库存位置管理的action用代码重载。


odoo10到11,12开发上的升级要点。个性化odoo标题系统名等及开发增强模块&#8211;Odoo11,12,13版本发布。