如何计算 odoo 13 销售订单行上的字段?
how to compute field on odoo 13 sale order line?
我正在尝试计算销售订单行上的折扣字段,该方法在 odoo 12 中运行良好,但在 odoo 13 中我每次尝试添加行时都会遇到此错误
sale.order.line(<NewId 0x7f3dd0d624a8>,).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 的替代品是什么
在 odoo V13 中,您必须将值分配给计算字段而不是 pass
您需要添加 else
语句并分配默认值
else:
self.discount_mount = 0.0
我知道这很清楚,如果我们没有折扣,那么该字段应该是 0.0,但 odoo 希望您这样做
在任何情况下你都需要给non-stored计算字段赋值,即使它是一个假值,如果在计算方法中没有赋值,计算存储字段将保持它们以前的值,所以不要' 依赖任何预期的默认值。
删除了 api.one
装饰器,现在默认为 multi-record。您只需从代码中删除装饰器并循环 self
(这在您的示例中已经完成)。
If it uses the values of other fields, it should specify those fields using depends().
您需要将 product_id
和 price_subtotal
替换为 price_unit
和 product_uom_qty
。
当 discount
为 0.0
时,discount_mount
也应为 0.0
并且在您的表达式中,您将折扣除以 100
然后执行乘法。如果 discount
的值为 0.0
,则不会有问题,表达式将被计算为 0.0
,并且 discount_mount
字段将设置为 0.0
这意味着您可以删除 if
表达式:
if rec.discount:
我正在尝试计算销售订单行上的折扣字段,该方法在 odoo 12 中运行良好,但在 odoo 13 中我每次尝试添加行时都会遇到此错误
sale.order.line(<NewId 0x7f3dd0d624a8>,).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 的替代品是什么
在 odoo V13 中,您必须将值分配给计算字段而不是 pass
您需要添加 else
语句并分配默认值
else:
self.discount_mount = 0.0
我知道这很清楚,如果我们没有折扣,那么该字段应该是 0.0,但 odoo 希望您这样做
在任何情况下你都需要给non-stored计算字段赋值,即使它是一个假值,如果在计算方法中没有赋值,计算存储字段将保持它们以前的值,所以不要' 依赖任何预期的默认值。
删除了 api.one
装饰器,现在默认为 multi-record。您只需从代码中删除装饰器并循环 self
(这在您的示例中已经完成)。
If it uses the values of other fields, it should specify those fields using depends().
您需要将 product_id
和 price_subtotal
替换为 price_unit
和 product_uom_qty
。
当 discount
为 0.0
时,discount_mount
也应为 0.0
并且在您的表达式中,您将折扣除以 100
然后执行乘法。如果 discount
的值为 0.0
,则不会有问题,表达式将被计算为 0.0
,并且 discount_mount
字段将设置为 0.0
这意味着您可以删除 if
表达式:
if rec.discount: