Odoo 11:想要根据 sale.order 模型实施原材料清单

Odoo 11 : want to implement bills of raw materials depending on sale.order model

我是 Odoo 的新手,经常卡住。现在,我真的没有想到解决方案。 我的目标是计算消耗的原材料。 问题 是我想用 mrp.bom.line 中的 product_id 初始化模型(此处 assessment.raw.material)。我尝试使用 "default=", ".create()" 但它不起作用。 我认为如果我获得所有 product_id 的所有原材料,我可以轻松地用 sql 查询填充所有列。 你能帮助我吗? 或者我弄错了? 或者你有更好的主意吗?谢谢你。抱歉我的英语不好。

class AssessmentRawMaterials(models.Model):
    _name = 'assessment.raw.materials'


    # get the product_id from mrp.bom.line
    # which is nomenclature of each
    # finished product
    product_id = fields.Many2one(
        string='Matières premières',
        comodel_name='mrp.bom.line',
        ondelete="no action",
        store=True
   )

    # get the product unit of measure
    # by calling the variable name of 
    # product_id
    product_uom_name = fields.Char(
        string=u'Unité de mesure',
        related='product_id.product_id.name'
   )

    # compute using sql query, 
    # long long 
    # inner join
    # from sale.order to mrp.bom.line
    raw_material_qty = fields.Integer(
       string=u'Quantité de matières premières',
       default=0
   )

如果您在 bom line 和 assessment raw 之间有一对一的关系 material 并且想要使用 bom lines 产品信息,请使用相关字段:

bom_line_id = fields.Many2one(
    string='Matières premières',
    comodel_name='mrp.bom.line',
    ondelete="no action")  # store not needed default True
product_id = fields.Many2one(
    comodel_name='product.product',
    related='bom_line_id.product_id',
    store=True)  # store explanation for related fields after code

在普通的 many2one 字段上,store 参数默认为 True。在相关字段上,您确实需要决定数据库中应该发生什么:

  1. 设置 store=True 将在您的 assessment_raw_materials table 上创建一个新列,并且 Odoo 会在每次更改时告知从 product_product table 复制值.所以它有点多余,但有时会希望。
  2. 设置 store=False 不会创建新列,而是 Odoo 将始终从 product_product table.
  3. 获取值