在CRM模块的管道记录中,我借助继承添加了一个名为price_difference
的Float。该字段是CRM模块中planned_revenue
和sale_amount_total
字段之间的区别。
当我厌倦了使用方法名get_price_diff()
时,这对我来说是行不通的。我想将sale_amount_total
和planned_revenue
与@api.
依赖项或@api.onchange
一起使用,但现在不起作用。
我的方法的工作很简单,它取决于sale_amount_total
和price_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
答案 0 :(得分: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
答案 1 :(得分:0)
我只能猜测,因为到目前为止,我还没有关于您的代码的所有信息。 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。
答案 2 :(得分:0)
您的代码:
price_difference = fields.Float(string='Price Difference', readonly=True)
readonly = True-您将无法保存此数据price_difference。
将其删除,然后测试您的代码。应该可以。
我遇到了同样的问题,它会更新,但是当我保存它时,它就会消失。不确定这是否是您的问题,因为您的问题含糊(您是什么意思,它现在不起作用?不保存数据?如果是这种情况,那么我的解决方案将为您效劳)