【问题标题】:Odoo many2one field related to one2many与one2many相关的Odoo many2one字段
【发布时间】:2017-06-30 13:55:44
【问题描述】:

我对 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',则结果似乎包含了拣货中的所有产品。如果我在picking 中搜索任何产品,picking 出现在视图中,它不仅限于第一个产品。

有人可以解释这种行为吗?源代码中甚至有一个注释,product_id 字段是专门用于搜索的,所以我在想有一些我从来不知道的神奇功能。

【问题讨论】:

    标签: openerp


    【解决方案1】:

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

    【讨论】:

    • 我明白了,所以有多个 stock.moves 与拣货相关的事实并不重要,因为它引用了 product_id 字段,即 many2one?当实际返回picking.product_id 的值时,它使用第一个stock.move 是真的吗?然后当你在picking.product_id上搜索时,它知道要在product_id上搜索所有与picking相关的stock.moves?
    • 是的,它获取与stock.picking 关联的stock.move 对象并从中检索product_id 字段。它不一定是所有对象中的第一个stock.move 对象,它采用已经与stock.picking 关联的对象(例如,通过接口)。是的,当您搜索 picking.product_id 时,您会从 stock_moves 模型中找到 product_id。抱歉耽误了回复。
    猜你喜欢
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多