我正在嘗試計算銷售訂單行上的折扣字段,并且該方法在 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
提交
取消