Odoo many2one字段与one2many有关

时间:2017-06-30 13:55:45

标签: openerp

我对Odoo源代码中的某些内容感到困惑。在stock.picking模型上,有一个product_id字段。它通过move_lines.product_id定义为相关字段。

move_lines是一个one2many字段。我不明白many2one字段如何使用one2many字段作为它的关系。

这是我所指的源代码的链接:

https://github.com/odoo/odoo/blob/316ffc80147de076b28c6156ac679dd90da0935e/addons/stock/models/stock_picking.py#L288

您可以看到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 个答案:

答案 0 :(得分:1)

它与One2many字段无关,它与E20 E50 E90 对象(move_lines模型)相关,并取自该模型stock.move字段,其类型为Many2one 。所以,一切都是正确的。 Here's代码。