为了账号安全,请及时绑定邮箱和手机立即绑定

如何计算 odoo 13 销售订单行上的字段?

如何计算 odoo 13 销售订单行上的字段?

慕妹3242003 2023-06-20 16:18:00
我正在尝试计算销售订单行上的折扣字段,并且该方法在 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 希望你这样做


查看完整回答
反对 回复 2023-06-20
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

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

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

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

您需要将product_idand替换price_subtotalprice_unitand product_uom_qty

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

if rec.discount:


查看完整回答
反对 回复 2023-06-20
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信