本文主要介绍了Odoo中onchange接口开发方法并提供代码示例
onchange接口
Onchange提供一种在后台用户界面(webclient)根据某些字段值改变表单其他数据的机制。
下面用一个 单价x数量=总价 的例子说明。首先你有一个model其中有三个字段,amount,unit_price, price 分别代表数量,单价,总价。你想要的效果是自动计算出总价,并在form中显示出来。通过一个用onchange装饰器的方法来实现。
<!-- 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",
}
}
这个方法有几点需要注意
1 self是单条记录 在一个form里展示 不能用在list view
2 方法里改变self里的字段 会更新到未保存的form里
3 通过onchange里参数字段 触发更新与上一节depands类似
4 onchange方法不针对某个特定字段
代码示例
@api.onchange('seats', 'attendee_ids')
def _verify_valid_seats(self):
if self.seats < 0:
return {
'warning': {
'title': "Incorrect 'seats' value",
'message': "The number of available seats may not be negative",
},
}
if self.seats < len(self.attendee_ids):
return {
'warning': {
'title': "Too many attendees",
'message': "Increase seats or remove excess attendees",
},
}
根据seats和attendee_ids改变 验证 用户输入1 检查座位数不能为负数2 座位数不能小于现有出席人数延伸
问题补充
onchange 和 depends 哪个先触发?答鼠标焦点失去时,onchange先触发
如何获得最好Odoo二次开发服务?星辉信息科技,专业Odoo二次开发公司