Odoo onchange接口说明及代码示例

本文主要介绍了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先触发

原文链接: https://www.erpdaxue.cn/odoo/odoo教程/odoo-onchange接口/

posted @ 2020-03-15 18:04  odoo开发者  阅读(1272)  评论(0编辑  收藏  举报