关注各种黑科技
B站UP主,编程教学,游戏玩家,挂B,金牛座

Odoo 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里展示 2 方法里改变self里的字段 会更新到未保存的form里 3 通过onchange里参数字段 触发更新 与上一节计算字段不同的是 1 self是单条记录 不能用在list view 2 计算字段的onchange是内置的行为 3 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 座位数不能小于现有出席人数 延伸问题 1 onchange 是否在write方法里触发 不在用户界面操作 2 除了返回提示框 还可以返回domian或False 3 onchange 和 depends 哪个先触发 鼠标焦点失去时,onchange先触发。 4 用onchange改写上例的计算字段是否成功 以证明二者的不同  
转载请注明出处
分享到: 更多 (0)

评论 0