odoo 13販売注文ラインのフィールドを計算する方法は?
販売注文明細の割引フィールドを計算しようとしていますが、この方法は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 V12では@ api.oneだったので、この問題を解決するにはどうすればよいですか。また、この場合の@ api.oneの代わりには何が必要ですか。
回答
odoo V13では、ステートメントpass
を追加しelse
てデフォルト値を割り当てる代わりに、計算フィールドに値を割り当てる必要があります
else:
self.discount_mount = 0.0
割引がない場合、これは明らかです。フィールドは0.0である必要がありますが、odooはあなたにそれをしてほしいと思っています。
いずれの場合も、格納されていない計算フィールドに値を割り当てる必要があります。たとえそれが偽のフィールドであっても、計算された格納フィールドは、計算メソッド中に割り当てられない場合、以前の値を保持するため、予想されるデフォルトに依存しないでください。値。
api.one
デコレータは、今では、デフォルトでは、マルチレコードで、削除されました。コードからデコレータを削除してループオーバーするだけですself
(これは例ですでに実行されています)。
他のフィールドの値を使用する場合は、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: