【问题标题】:@api. depends or @api.onchange not working with compute field. why?@api。取决于或 @api.onchange 不适用于计算字段。为什么?
【发布时间】:2019-06-05 19:09:50
【问题描述】:

在 CRM 模块的管道记录中,我在继承的帮助下添加了一个名为 price_difference 的浮点数。该字段是 CRM 模块中 planned_revenuesale_amount_total 字段之间的区别。

当我厌倦了使用方法名称get_price_diff() 时,它对我不起作用。我想将sale_amount_totalplanned_revenue@api. 依赖或@api.onchange 一起使用,但它现在不起作用。

我的方法的工作很简单,它取决于sale_amount_totalprice_difference 字段。如果任何值发生变化,该方法应该运行。

sale_amount_total 是基本模块中的计算字段。

我的代码如下。 怎么做?

class rate_record(models.Model):
    _inherit = 'crm.lead'

    price_difference = fields.Float(string='Price Difference', readonly=True)

    @api.onchange('sale_amount_total', 'planned_revenue')
    def get_price_diff(self):
        self.price_different = self.planned_revenue - self.sale_amount_total

【问题讨论】:

  • 只使用@api.multi 来计算函数
  • 请添加您的视图更改 (xml)。

标签: python odoo odoo-12


【解决方案1】:

使用 api.depends 或 api.onchange 无法实现您想要做的事情,因为这不是它们的工作方式(请参阅:HERE)。

您可以使用计算方法来做到这一点:

class rate_record(models.Model):
    _inherit = 'crm.lead'

    price_difference = fields.Float(
                           string='Price Difference', 
                           compute='get_price_diff')

    @api.depends('sale_amount_total', 'planned_revenue')
    def get_price_diff(self):
        self.price_different = self.planned_revenue - self.sale_amount_total

【讨论】:

    【解决方案2】:

    我只能猜测,因为到目前为止我还没有关于您的代码的所有信息。 onchange 方法get_price_diff 看起来不错。但是您将字段设置为readonly=True,这意味着不会保存“计算”值。

    从 Odoo 11 开始,您可以强制 Odoo 在其字段视图定义中使用 force_save="1" 保存只读标记字段的值更改:

    <field name="price_difference" force_save="1" />
    

    对于旧版本,Github 上的 OCA 存储库中有模块。例如对于 Odoo 10 web_readonly_bypass

    【讨论】:

      【解决方案3】:

      您的代码:

      price_difference = fields.Float(string='Price Difference', readonly=True)
      

      readonly=True - 您将无法保存此数据 price_difference。

      删除它,然后测试您的代码。应该可以。

      我遇到了同样的问题,它会更新,但是当我保存它时,它就消失了。不确定这是否是您的问题,因为您的问题含糊不清(您的意思是它现在不起作用?不保存数据?如果是这种情况,那么我的解决方案将适用于您,因为它适用于我)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 2012-11-06
        • 2019-06-08
        • 2021-10-26
        • 2014-09-27
        相关资源
        最近更新 更多