我使用Odoo 10,并且有一个名为sq_cost的自定义字段。当我输入sq_cost时,它会更新standard_price。使用以下代码,效果很好
@api.onchange('sq_cost')
def _onchange_sq_cost(self):
self.standard_price = (self.sqyards_per_box) * (self.sq_cost)
我的问题是我必须导入一个csv,要导入的字段之一是sq_cost。当我导入sq_cost时,计算不运行。如果我键入,效果很好。
答案 0 :(得分:0)
问题是,@api.onchange()
例如适用于视图级别,
=> Edit a record in form view
=> You change value on a `@api.onchange()` field, `sq_cost` in this case
=> `@api.onchange` function is fired, some other field value is changed `standard_price` in this case
**But nothing is changed on the database yet, cause you are still on edit mode**
=> Changes are stored in database only if you press save button.
但是从CSV导入的情况下,视图级别没有任何更改,直接在数据库中更改了值,因此没有执行此过程。
解决方案:
您可以在onchange
字段中将compute function
与standard_price
一起使用,而不必在视图级别使用@api.depends('sq_cost')
功能。这适用于数据库级别,因此,每次导入sq_cost
时都将计算值
值。注意事项:
** compute field is by default not stored, set `store=True`
** compute field is by default readonly, set `inverse='inverse_function'` to make this field editable