odoo中,实现compute字段可搜索,有两种方法。
方法一
设置字段参数 store=True,使其字段存在数据库里,便可搜索。此方法较为简单,不具体演示。
方法二
设置字段参数 search方法,如下可实现所需逻辑,可根据自己的逻辑进行书写响应代码。这个⽅法预期不实现实际的搜索。⽽是接收⽤于搜索该字段的运算符和值来作为参 数,并预期返回⼀个带有⽤于替换搜索条件的域。
注意
若该字段不存数据库请使用方法二,方法一较为简单。
补充
有时我们使用compute对相应字段值做出修改,想让有关字段值也做出修改,直接写在该函数代码里,并不会生效,此时需要inverse属性值,根据对应逻辑修改相关字段值。
当通过compute属性指定方法,根据依赖值计算得到当前字段值时。一般也要制定这个计算的逆运算——根据当前字段值,改变依赖值。
比如:开始日期+持续时间=结束日期,我们有这个可以得到结束日期。
如果用户指定了开始日期和结束日期,那么持续时间=结束日期-开始日期,实现这个逻辑的方法就是inverse属性值指向的方法。
balance_amount = fields.Monetary(inverse='_set_executed_amount')
def _set_executed_amount(self):
for res in self:
if self.contract_category_code != 'income_contract':
executed_amount = sum(res.payment_records_ids.mapped('payment_amount'))
else:
executed_amount = sum(res.contract_receipt_record_ids.mapped('request_amount'))
res.executed_amount = executed_amount