Odoo 11:要根据销售订单模型执行原材料清单

时间:2019-01-10 12:23:44

标签: model odoo record

我是Odoo的新手,经常被卡住。现在,我真的束手无策。 我的目标是计算消耗的原材料。 问题是我想使用mrp.bom.line中的product_id初始化一个模型(此处为评估.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
   )

1 个答案:

答案 0 :(得分:0)

如果物料清单行与评估原材料之间具有一对一的相似关系,并且想要使用物料清单产品信息,请使用相关字段:

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字段上,存储参数默认为True。在相关字段上,您确实需要确定应该在数据库中发生什么:

  1. 设置store=True将在assessment_raw_materials表上创建一个新列,Odoo会告诉每次更改时从product_product表中复制该值。因此,这有点多余,但有时是希望的。
  2. 设置store=False不会创建新列,但是Odoo总是会从product_product表中获取值。