**
odoo12的计算字段compute和related
**
odoo的计算字段默认不保存在数据库中,使用的时候在进行计算,不能用作domain等筛选的时候或者其他函数中引用该字段使用,可以使用store=True强制保存到数据库中.但是加了store=True表示该字段只能计算一次.下面来看一下compute和related的时候怎么解决只计算一次的问题
- compute利用函数进行计算,加上@api.depends()装饰器,依赖其他字段触发计算.这样便可以解决store=True只计算一次的问题
- related依赖其他字段
怎么修改计算字段的值?
计算字段默认是只读的,要想修改计算字段,就要在字段定义中加入inverse属性inverse='函数名',反参数的使用非常简单。通常,计算字段是只读的,因为它从记录集即时计算值。如果您需要在 计算字段上进行手动输入,可以通过给出反函数来完成。因此,当字段被写入/创建时,它会触发对修饰函数的调用。它反转计算并设置相关字段。
Invserse 通俗点讲的话,他是 Compute 的相反设置.我们在 field 中设置了它对应的 Compute 计算方法,那么这个字段就变成了只读的,这时候我们可以设置 inverse,来达到为该字段赋值的目的。设置了 inverse 这个,字段就可以在前端直接编辑,赋值就是通过这个 inverse 设置的方法
upper=fields.Char(compute='_compute_upper',inverse='_inverse_upper', search='_search_upper')
@api.depends('employee_id')
def _compute_upper(self):
for rec in self:
rec.upper = rec.employee_name.upper() if rec.employee_name else False
def _inverse_upper(self):
for rec in self:
rec.employee_name = rec.upper.lower() if rec.upper else False