我对Odoo源代码中的某些东西感到困惑 . 在 stock.picking
模型上,有一个 product_id
字段 . 它通过 move_lines.product_id
定义为相关字段 .
move_lines
是一个one2many字段 . 我不明白many2one字段如何使用one2many字段作为其关系 .
这是我所指的源代码的链接:
您可以看到 product_id
定义为:
product_id = fields.Many2one('product.product', 'Product', related='move_lines.product_id')
move_lines
定义为:
move_lines = fields.One2many('stock.move', 'picking_id', string="Stock Moves", copy=True)
这个定义的目的是什么?甚至如何允许?
如果我查看 product_id
字段的值以进行拣配,则会返回拣配中第一个移动线的产品,而不是所有产品 .
但是,如果我在“产品”字段上使用自定义过滤器搜索拣配树视图(例如, Product contains 'Product Name'
),则结果似乎会考虑到拣配中的所有产品 . 如果我在选择中搜索任何产品,则视图中会出现选择,它不仅限于第一个产品 .
有人可以解释这种行为吗?在源代码中甚至还有一个注释,即 product_id
字段专门用于搜索,因此我认为有一些我从未知道的神奇功能 .
1 回答
它's not related to the One2many field, it'与
move_lines
对象(它是stock.move
model)相关,并从该模型product_id
字段中获取,其类型为Many2one . 所以,一切都是正确的 . Here's代码 .