美文网首页
数据验证

数据验证

作者: 葡萄柚子茶 | 来源:发表于2019-05-21 16:49 被阅读0次

在很多场景下,需要对用户输入数据进行验证。比如编码不能重复,邮箱的准确性,手机号码规则,凡是不符合这些验证规则的数据,要报错并拒绝保存。在odoo中使用constraints(约束)来实现。odoo提供两种方式实现自动验证,python constraintssql constraints

sql constraints

_sql_constraints = [
    ('name_description_check',
     'CHECK(name != description)',
     "名称和描述不能相同"),

    ('name_unique',
     'UNIQUE(name)',
     "已存在相同名称"),
]

sql constraints 通过模块属性_sql_constraints 进行定义。它是一个元组的列表,每个元组是一条数据约束(name, sql_definition, message),包含三个字符串元素:1)约束名称;2)约束规则(postgresql约束规则);3)违反约束规则时的警告信息。

注意,使用sql constraints,需要确保当前数据库里面没有违反该约束的数据,如果数据库中存在有违反约束的记录,那么在更新模块的时候系统日志里面会有警告信息并且constraints会添加失败。

python constraints

from odoo.exceptions import ValidationError

@api.constrains('age')
def _check_something(self):
    for record in self:
        if record.age > 20:
            raise ValidationError("Your record is too old: %s" % record.age)
    # all records passed the test, don't return anything

@api.constrains('instructor_id', 'attendee_ids')
def _check_instructor_not_in_attendees(self):
    for r in self:
        if r.instructor_id and r.instructor_id in r.attendee_ids:
            raise exceptions.ValidationError("A session's instructor can't be an attendee")

python constraints,是通过装饰器@api.constrains(field_name,)来定义,每次记录修改的时候,如果包含装饰器定义的字段就会触发下面的方法,所以需要在方法里面判断是否违反约束,如果违反,则通过raise异常来弹出警告框并阻止记录保存。使用python constraints的时候就算是系统内已经有违反约束的记录也可以对新记录生效,并且里面的判断可以添加更加复杂的逻辑。

总的来说,sql constraints的效率较高,而python constraints使用更加灵活。

作者:luohuayong
链接:https://www.jianshu.com/p/ca4a461422d2
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

相关文章

  • Excel单元格中加入下拉选项

    菜单→数据→数据验证→数据验证→验证条件:序列。

  • Excel高效录入数据—数据验证

    高效录入数据—数据验证 数据验证的作用 数据验证的方法 其他数据验证方法 数据验证的作用 今天来到公司,听到数据分...

  • 机器学习入门-模型验证

    混肴矩阵 交叉验证 Holdout验证 随机选取大部分数据作训练数据集,剩余数据做验证数据集 交叉验证 将数据随机...

  • Active Record 数据验证

    数据验证概览 为什么要做数据验证 数据验证确保只有有效的数据才能存入数据库,在模型中做验证是最有保障的,只有通过验...

  • Struts框架(2) - 数据效验 & Struts

    Struts数据效验 表单数据的验证:前台验证:主要是通过JS验证, 表达数据是否合法!后台验证:通过后台java...

  • struts2数据校验

    表单数据的验证: 前台验证:主要是通过JS验证, 表达数据是否合法!后台验证:通过后台java代码进行验证!Str...

  • 掌握Thinkphp3.2.0----自动验证

    自动验证是TP在create数据的时候,自动对数据进行验证。 TP提供了两种验证方式:静态验证($_validat...

  • 《Rails-Guides》Reading notes thre

    数据验证 Rails 团队认为,模型层数据验证最具普适性。 Active Record 执行验证后,所有发现的错误...

  • 纠错路上漫漫不会点套路怎么行呢

    今天我们来讲讲关于数据选项卡里数据工具组里的数据验证功能 数据验证功能能做个啥,当然是帮你节省时间啊 数据验证可根...

  • 深度学习验证码识别---验证码图片生成

    在做验证码识别之前,需要做数据准备,即验证码图片,作为后续模型训练与验证的训练数据集和测试数据集。验证码图片在制作...

网友评论

      本文标题:数据验证

      本文链接:https://www.haomeiwen.com/subject/jpwjzqtx.html