变更事件
“变更事件”机制为客户端交互提供了一种灵活的方式,当用户在输入框中输入一个值就可以立即修改表单内容,而不必更新到数据库。
例如,假设一个实体有三个字段: amount
、 unit_price
和 price
,你希望当修改了其他两个字段内容的时候,能够自动更新 price
字段的值。为了达到这个目的,定义一个方法,使用 self
作为参数获取当前表单的数据记录,并添加onchange()
装饰器,确定当哪些字段变更时触发该方法。针对 self
数据记录所做的任何修改都将反应到当前的表单视图。
<!-- content of form view -->
<field name="amount" />
<field name="unit_price" />
<field name="price" readonly="1" />
# onchange handler
@api.onchange('amount','unit_price')
def _onchange_price(self):
# set auto-changing field
self.price = self.amount * self.unit_price
# Can optionally return a warning and domains
return{
'warning':{
'title':"Something bad happened",
'message':"It was very bad indeed"
}
}
对于计算字段,onchange
的行为是内置的,这一点可以通过 “Session“ 的 form 视图加以验证:改变座位数或者参加人数,taken_seats
字段的进度条将自动更新。
变更事件练习:6-1
警告:对于不合法的值(负的座位数,或者大于座位数的参加人数),可以添加变更事件处理方法以提供警告信息。