一:onchange机制【onchange=前端js函数!可以实现前端实时更新以及修改验证】
onchange机制:不需要保存数据到数据库就可以实时更新用户界面上的显示。
@api.onchange('监听的字段', '监听的字段'。。。) def _onchange_受影响的字段(self): # set auto-changing field self.受影响的字段 = 根据监听字段计算出受影响字段的值
也可以监控某字段值的变化,如果异常则报错:
@api.onchange('监听的字段') def _verify_监听字段(self): if 监听字段值异常: return { 'warning': { 'title': "异常类型", 'message': "具体异常信息", }, }
二:模型字段约束
python约束:使用装饰器,@api.constrains('约束字段')
Python约束通过方法装饰器constraints()
来定义,并在记录集上调用这个方法。
装饰器参数指定了约束涉及的字段,当涉及的字段中任一发生改变时触发方法执行。如果不满足约束条件,该方法将引发异常。
@api.constrains('约束字段') def _check_something(self): for record in self: if record.约束字段 op 值: raise ValidationError("异常信息")
sql约束:使用_sql_constraints属性。
属性值是一个列表,每一个列表元素有三个内容:(name, sql_definition, message):
name是约束字段名
sql_definition是一个postgresql语句,检查该字段值
message是校验失败时返回的错误消息
_sql_constraints = [ ('name', 'CHECK(name op 值)', "异常信息"), ('name', 'sql语句', "异常信息"), ]