Odoo-计算字段导入

时间:2019-02-27 14:57:59

标签: python odoo odoo-10 odoo-11

我使用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时,计算不运行。如果我键入,效果很好。

1 个答案:

答案 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 functionstandard_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