You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Odoo中如何在notebook form view内展示已有tree view

Odoo 表单Notebook区域内嵌已有Tree视图配置方法

按Model X和Model Y的关联关系选对应方案即可,全程不需要重复编写你已经开发完成的Model X Tree视图代码:

  • 方案1:两个模型已经配置关联字段(绝大多数业务场景用这个)
    只要你在Model Y上定义了指向Model X的One2many/Many2many字段,或是Model X上有指向Model Y的Many2one字段,直接在Notebook的page节点内引入关联字段,指定你已有Tree视图的XML ID即可完成复用:
    <!-- 继承或重写Model Y的Form视图 -->
    <record id="inherit_model_y_form" model="ir.ui.view">
        <field name="name">model.y.form.inherit</field>
        <field name="model">model.y</field>
        <field name="inherit_id" ref="原Model Y表单视图的XMLID"/>
        <field name="arch" type="xml">
            <!-- 定位到你要插入Notebook的位置,从零写Y的表单时直接写全结构即可 -->
            <xpath expr="//sheet" position="after">
                <notebook>
                    <page string="关联X记录" name="x_related_page">
                        <!-- name填Model Y上关联X的字段名,views参数绑定你已经写好的X的Tree视图 -->
                        <field name="x_record_ids">
                            <tree views="[(ref('你的模块名.model_x_exist_tree_view_id'), 'list')]"/>
                        </field>
                    </page>
                </notebook>
            </xpath>
        </field>
    </record>
    
    这个配置会自动加载和当前Y记录关联的X数据,原有Tree视图上的按钮、字段、颜色规则、计算逻辑全部可以直接复用,不会丢失原有功能。
  • 方案2:两个模型无直接关联,需要展示指定规则过滤后的Model X列表
    不需要额外新建关联字段,直接在Notebook页面里绑定Model X的窗口动作,指定复用已有Tree视图即可:
    <record id="inherit_model_y_form" model="ir.ui.view">
        <field name="name">model.y.form.inherit</field>
        <field name="model">model.y</field>
        <field name="inherit_id" ref="原Model Y表单视图的XMLID"/>
        <field name="arch" type="xml">
            <xpath expr="//sheet" position="after">
                <notebook>
                    <page string="X记录列表" name="x_list_page">
                        <act_window 
                            name="X数据列表"
                            res_model="model.x"
                            src_model="model.y"
                            view_mode="tree"
                            multi="True"
                            views="[(ref('你的模块名.model_x_exist_tree_view_id'), 'list')]"
                            <!-- domain里写过滤规则,支持取当前Y表单的字段值做动态过滤 -->
                            domain="[('state', '=', 'done')]"
                            <!-- 如果要新建X记录时自动关联当前Y,在context里传对应字段默认值 -->
                            context="{'default_y_related_id': active_id}"
                        />
                    </page>
                </notebook>
            </xpath>
        </field>
    </record>
    

避坑提示:

  • 绑定视图时XMLID必须加所属模块名前缀,比如你的Tree视图定义在crm模块下,id是crm_lead_tree,那ref值必须写ref('crm.crm_lead_tree'),否则升级模块时会报视图不存在的错误
  • 不要在<tree>标签内重复写字段列配置,否则会直接覆盖你原有Tree视图的定义,导致之前写的样式、逻辑失效
  • 如果需要同时在Tree下面支持点开记录看Form视图,只要在views参数里追加对应Form视图的引用即可,格式和Tree一致

内容的提问来源于stack exchange,提问作者Rama Alty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.12 16:15:50