Odoo 11:在 sale.order.line 模型中创建计算字段时出现问题
Odoo 11 : Problem while creating compute field in sale.order.line model
我想将每个产品的 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,...我知道问题与代码有关,但不知道在哪里。你能帮助我吗?谢谢
你创建的字段类型错误,应该是Many2one而不是Integer:
bom_id = fields.Many2one(
comodel_name='mrp.bom',
string='Bom ID',
compute='_get_bom_id'
)
您还忘记了 api.depends
装饰器。在您的情况下,每次字段 product_id
更改时都应重新计算该值。
此外,计算字段在执行其计算方法之前总是值 False
,因此如果在您的计算方法中工作流没有给字段赋值,它仍然值 False
,这意味着像 record.bom_id = 0
或 record.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
我想将每个产品的 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,...我知道问题与代码有关,但不知道在哪里。你能帮助我吗?谢谢
你创建的字段类型错误,应该是Many2one而不是Integer:
bom_id = fields.Many2one(
comodel_name='mrp.bom',
string='Bom ID',
compute='_get_bom_id'
)
您还忘记了 api.depends
装饰器。在您的情况下,每次字段 product_id
更改时都应重新计算该值。
此外,计算字段在执行其计算方法之前总是值 False
,因此如果在您的计算方法中工作流没有给字段赋值,它仍然值 False
,这意味着像 record.bom_id = 0
或 record.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