Odoo 10如何仅在库存内部转移/交货单移动行显示自定义字段?
解决Odoo中stock.move自定义字段仅在交货单/内部转移显示的问题
这个错误的根源是Odoo视图的attrs属性无法直接解析嵌套的关联字段路径(比如picking_id.picking_type_code),尤其是在tree视图场景下。我们需要通过添加一个关联字段来绕开这个限制,同时纠正你的显示条件逻辑。
步骤1:给stock.move添加关联字段
首先在你的自定义模块的Python文件中,给stock.move模型添加一个关联字段,将picking_id.picking_type_code映射到当前模型:
from odoo import models, fields class StockMove(models.Model): _inherit = 'stock.move' picking_type_code = fields.Selection(related='picking_id.picking_type_code', string='Picking Type Code', store=False)
这里用store=False表示不把这个字段存储到数据库,仅在运行时获取关联值,这样不会增加数据库负担。
步骤2:修正XML视图代码
接下来修改你的XML视图,使用新添加的picking_type_code字段来设置显示条件,同时调整逻辑以匹配你的需求(仅在交货单outgoing和内部转移internal时显示字段):
<record id="view_move_picking_tree_inherit1" model="ir.ui.view"> <field name="name">stock.move.tree.inherit.finish.item</field> <field name="model">stock.move</field> <field name="inherit_id" ref="stock.view_move_picking_tree"/> <field name="arch" type="xml"> <field name="product_id" position="after"> <field name="finish_item" nolabel="1" attrs="{'invisible': [('picking_type_code', 'not in', ['outgoing', 'internal'])]}"/> </field> </field> </record>
关键调整说明:
- 替换了原来的
picking_id.picking_type_code为新的关联字段picking_type_code,这样Odoo视图解析器可以正确识别这个字段。 - 调整了
attrs的条件逻辑:原来的条件是当类型为outgoing时隐藏,现在改为当类型不在outgoing和internal列表中时隐藏,正好匹配你需要仅在这两种单据显示字段的需求。 - 给视图的
name字段增加了更具辨识度的后缀,避免和系统视图重名。
额外注意事项
- 确保你的自定义模块依赖
stock模块,在__manifest__.py中添加'depends': ['stock']。 - 升级模块后,记得刷新浏览器缓存,确保新字段和视图生效。
内容的提问来源于stack exchange,提问作者M Tahir Noor




