【问题标题】:how to compute field on odoo 13 sale order line?如何计算 odoo 13 销售订单行上的字段?
【发布时间】:2020-12-13 00:16:07
【问题描述】:

我正在尝试计算销售订单行上的折扣字段,该方法在 odoo 12 中运行良好,但在 odoo 13 中,每次尝试添加行时都会出现此错误

sale.order.line(,).discount_mount

这就是我所做的

class discount_cycle(models.Model):
_inherit = 'sale.order.line'

discount_mount = fields.Float(string="",  required=False , compute='discount_calculation')


@api.depends('product_id','discount','price_subtotal')
def discount_calculation(self):
    for rec in self:
        if rec.discount:
            if rec.product_uom_qty > 1:
                rec.discount_mount = ((rec.price_unit * rec.product_uom_qty) * (rec.discount / 100))
            else:
                rec.discount_mount = (rec.price_unit * (rec.discount / 100))
        pass

请注意,在 odoo V 12 中是 @api.one,那么我该如何解决这个问题以及在这种情况下 @api.one 的替代品是什么

【问题讨论】:

    标签: python python-3.x odoo decorator odoo-13


    【解决方案1】:

    在 odoo V13 中,您必须将值分配给计算字段而不是 pass,您需要添加 else 语句并分配默认值

         else:
                 self.discount_mount = 0.0
    

    我知道这很清楚,如果我们没有折扣,那么该字段应该是 0.0 但 odoo 希望你这样做

    【讨论】:

      【解决方案2】:

      在任何情况下,您都需要为非存储计算字段分配一个值,即使它是虚假的,如果在计算方法期间未分配,计算存储字段将保留其先前的值,因此不要依赖任何预期的默认值。

      api.one 装饰器被移除,现在它默认是多记录的。您只需从代码中删除装饰器并循环 self(在您的示例中已经完成)。

      如果它使用其他字段的值,它应该使用depends()指定这些字段。

      您需要将product_idprice_subtotal 替换为price_unitproduct_uom_qty

      discount0.0 时,discount_mount 也应该是0.0,在您的表达式中,您将折扣除以100,然后进行乘法运算。如果discount 的值为0.0,则不会有问题,表达式将被评估为0.0,并且discount_mount 字段将设置为0.0,这意味着您可以删除@ 987654338@表达式:

      if rec.discount:
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多