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

如何在表单中重复使用同一字段?视图XML实现及优化问询

在Odoo表单中重复使用同一字段的解决方案

你遇到的问题是Odoo表单视图中默认不支持直接重复使用同一个字段实例(尤其是像move_lines这类one2many字段),因为多个相同字段的视图组件会共享数据绑定,导致渲染异常或不符合预期。下面给你两种实用的解决方法:

方法一:通过context区分字段实例

最简单的方式是给新页面中的move_lines字段添加一个独特的context参数,让Odoo将其识别为独立的视图组件,这样就能和父视图中的原字段共存。修改你的XML代码如下:

<xpath expr="/form/sheet/notebook/page[3]" position="after">
    <page string="Tracking Info">
        <field name="move_lines" context="{'tracking_view': 1}">
            <tree string="Stock Moves" editable="bottom" create="false" delete="false">
                <field name="product_id" readonly="True" required="1"/>
                <field name="tracking_no"/>
            </tree>
        </field>
    </page>
</xpath>

这里添加的context="{'tracking_view': 1}"是一个自定义标识,只要和父视图中move_lines的context不同,就能让Odoo正确渲染这个新的字段实例,不会和原字段产生冲突。

方法二:创建关联字段(Related Field)

如果第一种方法还是存在显示问题,你可以在模型中创建一个和原字段关联的新字段,通过这个新字段来实现重复展示。

首先在你的模型类中添加以下Python代码:

tracking_move_lines = fields.One2many(
    comodel_name='stock.move',
    related='move_lines',
    string='Tracking Stock Moves'
)

这个字段会完全映射move_lines的数据,但作为一个独立的字段存在,不会和原字段的视图实例产生冲突。

然后修改你的视图XML,使用这个新字段:

<xpath expr="/form/sheet/notebook/page[3]" position="after">
    <page string="Tracking Info">
        <field name="tracking_move_lines">
            <tree string="Stock Moves" editable="bottom" create="false" delete="false">
                <field name="product_id" readonly="True" required="1"/>
                <field name="tracking_no"/>
            </tree>
        </field>
    </page>
</xpath>

这种方法的优势是更加稳定,完全避免了字段实例冲突的问题,适合对视图稳定性要求较高的场景。

额外注意事项

  • 如果原move_lines字段有默认的domain或context,你可以在新的字段实例中继承或调整这些参数,确保显示的数据符合你的需求。
  • 保持tree视图的配置一致性,比如create="false"和delete="false"这类权限控制属性,避免用户在新页面中误操作数据。

内容的提问来源于stack exchange,提问作者Hamza Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:59:42