首页 > 解决方案 > Odoo 11:在 sale.order.line 模型中创建计算字段时出现问题

问题描述

我想将每个产品的 bom_id 放在sale.order.line模型中,为此,我使用计算字段来获取 bom id (mrp.bom)。我需要它用于指定的开发,目标是在生产之前根据公司的计算显示消耗的材料。这是代码:

bom_id = fields.Integer(
    string='Bom ID',
    compute='_get_bom_id'
)

@api.multi
def _get_bom_id(self):
    bom_obj = self.env['mrp.bom']
    for record in self:
        bom_obj_id = bom_obj.search([('product_id', '=', record.product_id.id)])
        if bom_obj_id:
            record.bom_id = bom_obj_id.id
        else:
            record.bom_id = 0

问题是该字段不是在 sale.order.line 模型中创建的,但是如果我删除了计算参数,它就可以工作。我已经更新了模块,签入 pgadmin,......我知道问题与代码有关,但不知道在哪里。你能帮助我吗?谢谢

标签: python-3.xfieldodooodoo-11

解决方案


您创建的字段类型错误,它应该是Many2one而不是Integer

bom_id = fields.Many2one(
    comodel_name='mrp.bom',
    string='Bom ID',
    compute='_get_bom_id'
)

你也忘记了api.depends装饰器。在您的情况下,每次字段product_id更改时都应重新计算该值。

此外,计算字段总是False在执行其计算方法之前进行赋值,因此如果在您的计算方法中工作流没有为字段赋值,它仍然是 values False,这意味着行喜欢record.bom_id = 0record.bom_id = False无用。

@api.multi
@api.depends('product_id')
def _get_bom_id(self):
    bom_obj = self.env['mrp.bom']
    for record in self:
        bom_obj_id = bom_obj.search([('product_id', '=', record.product_id.id)])
        if bom_obj_id:
            record.bom_id = bom_obj_id.id

推荐阅读