odoo中,字段(除了直接从数据库中读取的字段)可通过compute
参数来实现计算得出;如果计算字段依赖于其他字段,就需要用depends()
:方法来处理。
from openerp import api total = fields.Float(compute='_compute_total') @api.depends('value', 'tax') def _compute_total(self): for record in self: record.total = record.value + record.value * record.tax上面的total字段依赖于value与tax字段。
依赖里面还可以通过 . 来访问下级字段。
@api.depends('line_ids.value')
def _compute_total(self):
for record in self:
record.total = sum(line.value for line in record.line_ids)
默认情况下计算字段不被保存,设置参数store=True,可使该字段默认设置为保存,保存以后该字段将可以被搜索到了。
多个字段可以同时被同一个方法计算得出。
onchange: 实时更新ui,
通过onchange,计算字段将被实时更新;
-
对于非计算字段,
onchange()
方法提供新的字段值。
@api.onchange('field1', 'field2') # if these fields are changed, call method
def check_change(self):
if self.field1 < self.field2:
self.field3 = True