我正在尝试计算销售订单行上的折扣字段,并且该方法在 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
2 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
在 odoo V13 中,您必须将值分配给计算字段,而不是pass
需要添加else
语句并分配默认值
else: self.discount_mount = 0.0
我知道这很清楚,如果我们没有折扣,那么该字段应该是 0.0,但 odoo 希望你这样做
慕的地6264312
TA贡献1817条经验 获得超6个赞
在任何情况下都需要为非存储计算字段分配一个值,即使它是假的,如果在计算方法期间未分配,计算存储字段将保留其先前的值,因此不要依赖任何预期的默认值价值。
装饰api.one
器被移除,现在默认为多记录。您只需从代码中删除装饰器并循环self
(这在您的示例中已经完成)。
如果它使用其他字段的值,则应使用depends()指定这些字段。
您需要将product_id
and替换price_subtotal
为price_unit
and product_uom_qty
。
当discount
是 时0.0
,也discount_mount
应该是0.0
并且在您的表达式中,您将折扣除以然后100
进行乘法。discount
如果的值为0.0
,则不会有问题,表达式将被计算为0.0
并且discount_mount
字段将设置为0.0
这意味着您可以删除if
表达式:
if rec.discount:
添加回答
举报
0/150
提交
取消