我对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
字段专门用于搜索,所以我认为有一些我从未知道的神奇功能。
答案 0 :(得分:1)
它与One2many字段无关,它与E20
E50
E90
对象(move_lines
模型)相关,并取自该模型stock.move
字段,其类型为Many2one 。所以,一切都是正确的。 Here's代码。