【问题标题】:Odoo 11 : Problem while creating compute field in sale.order.line modelOdoo 11:在 sale.order.line 模型中创建计算字段时出现问题
【发布时间】:2019-06-18 07:55:58
【问题描述】:

我想将每个产品的 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.x field odoo odoo-11


【解决方案1】:

你创建的字段类型不对,应该是Many2one而不是Integer

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

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

此外,计算字段在执行其计算方法之前总是值False,所以如果在你的计算方法中工作流没有给字段值,它仍然值False,这意味着像@ 987654326@或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

【讨论】:

  • 我更新了模块,但还是不行。 odoo.log 中没有相关错误,错误但与它无关:错误查询:b'ALTER TABLE "mrp_production" ALTER COLUMN "date_planned" SET NOT NULL' //// psycopg2.IntegrityError: ERREUR: la Colonne « date_planned » contient des valeurs NULL。有关信息,模型 sale.order.line 已包含 62959 条记录。
  • 确切地说,该错误是因为date_planned 是 PostgreSQL 中的 NOT NULL 列,并且您至少有一条该列值为 NULL 的记录。当然,问题是我们忘记了 api.depends 装饰器。您的字段仅取决于product_id,因此我的编辑将解决您的问题。
  • 还有另一个附加信息:如果您希望数据库中的值作为列,请在字段定义中使用store=True。计算字段默认不存储在数据库中。
  • 抱歉,我办公室外没有互联网连接。 @CZoellner,它有效。谢谢你们俩。
  • @m0r7y 很高兴我们为您提供了帮助。请将答案设置为正确以结束您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2016-06-28
相关资源
最近更新 更多