如何在表单中重复使用同一字段?视图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
相关产品推荐
相关产品推荐

