odoo开发教程四:onchange、唯一性约束

 

转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189273.html

 

一: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语句',
      "异常信息"),
 ]
复制代码
复制代码

 

 
posted @ 2019-07-15 15:40  keenyeh  阅读(900)  评论(0编辑  收藏  举报