Odoo----constraints 使用_api.constraint-程序员宅基地

技术标签: odoo  

Odoo中的约束

一:装饰器约束(字段约束)

装饰器参数指定了约束的字段,当涉及的字段中任一发生改变时触发方法执行。如果不满足约束条件,该方法将引发异常。

@api.constrains('约束字段')
def _check_something(self):
 for record in self:
     if record.约束字段 op 值:
         raise ValidationError("异常信息")

Constraints:

@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")

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

二:代码约束(函数约束,代码层面的约束)

@api.multi
    def _check_XX(self):
      //字段校验函数
        if ...:
           return False
        return True

    _constraints = [
        (_check_XX, u'约束异常信息!', ['约束的字段', ...]),]

三:Sql约束(数据库层面的约束)

sql约束:使用_sql_constraints属性。

属性值是一个列表,每一个列表元素有三个内容:(name, sql_definition, message):

  • name是约束名,

  • sql_definition是一个postgresql语句,可以为uniqe检查、或者用聚集函数判断某字段值等等,结果返回值是布尔类型即可,

  • message是校验失败时返回的错误消息。

_sql_constraints = [
        ('约束名', 'postgresql校验语句', u'报错信息!')
    ]
   

例如,唯一性约束:

_sql_constraints = [
        ('xx_uniq', 'unique (唯一性的字段,可以多个字段复合)', u'存在重复的内容!')
    ]

注意在使用SQL Constraints,需要确保当前数据库里面没有违反该约束的数据,如果有违反约束的数据在更新模块的时候系统日志里面会有警告信息,大家要注意这个。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41551450/article/details/109220741

智能推荐

响应式编程库Reactor 3 Reference Guide参考文档中文版(v3.2.0)-程序员宅基地

文章浏览阅读231次。Project Reactor 是 Spring WebFlux 的御用响应式编程库,与 Spring 是兄弟项目。关于如何基于Spring的组件进行响应式应用的开发,欢迎阅读系列文章《响应式Spring的道法术器》。官方参考文档地址:http://projectreactor.io/docs/core/release/reference/中文翻译文档地址:http://htmlprevi..._reactor 指南中文版v3.0

TeamTalk部署问题及解决方案_teamtalk ../daeml: 没有那个文件或目录-程序员宅基地

文章浏览阅读727次。TeamTalk部署问题及解决方案1、部分源下载地址2、编译安装libiconv报错3、找不到tt4、编译im-server5、缺少daeml6、找不到mysql.h7、centos7 mini 安装后无法连接到网络8、使用mwget提高下载速度9、nginx: [emerg] unknown log format "access" in错误解决方法10、PHP报错1、部分源下载地址gmpwget ftp://ftp.gnu.org/gnu/gmp/gmp-5.1.3.tar.gzmpfrwge_teamtalk ../daeml: 没有那个文件或目录

java中将多文件字节流压缩成zip-程序员宅基地

文章浏览阅读2.4k次。java中将多文件字节流压缩成zip核心就是使用java.util.zip包中的ZipOutputStream直接上核心代码/** * * @param zipFilePath zip保存路径 * @param zipFileName zip文件名 * @param byteList 文件字节码Map,k:fileNam..._java将多个字节流压缩成zip

Python-Django毕业设计在线考试系统(程序+Lw)_django在线考试系统-程序员宅基地

文章浏览阅读141次。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程项目运行环境配置:Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs。项目技术:django + python+ Vue 等等组成,B/S模式 +pychram管理等等。环境需要1.运行环境:最好是python3.7.7,我们在这个版本上开发的。其他版本理论上也可以。2.pycharm环境:pycharm都可以。_django在线考试系统

Java关键字(二)——native_nativeadd-程序员宅基地

文章浏览阅读612次。
   本篇博客我们将介绍Java中的一个关键字——native。
  native 关键字在 JDK 源码中很多类中都有,在 Object.java类中,其 getClass() 方法、hashCode()方法、clone() 方法等等都是用 native 关键字修饰的。

 public final native Class&l..._nativeadd

【HarmonyOS HiSpark IPC DIY Camera试用连载4 】 鸿蒙OS内核liteos-a如何启动第一个用户进程init_lite_lite_user_sec_entry原理-程序员宅基地

文章浏览阅读2.6k次。【HarmonyOS HiSpark IPC DIY Camera试用连载4 】 鸿蒙OS内核如何启动第一个用户进程init_lite1. 鸿蒙OS编译知识2. 从编译过程看鸿蒙OS代码结构3. 第一个用户态进程init_lite4. Init_lite是如何被kernel调用的?1. 鸿蒙OS编译知识(原理引自中科创达OpenHarmony研究组 鸿蒙OS开源代码精要解读之——init)OpenHarmony源码编译系统使用了google开发的gn工具以及ninjia。这二者结合起来比传统的make_lite_user_sec_entry原理

随便推点

c++笔记-程序员宅基地

文章浏览阅读62次。多行代码的函数:std::cout << R"()";

【产品】PRD需求文档:云迹扶教(公益支教APP)_公益类app用户画像描述-程序员宅基地

文章浏览阅读2.2k次。简介:借助CSDN平台发布自己编写的需求文档。参考了前辈们的经验,编写如下(持续更新):正文:PRD:云迹扶教APP产品需求文档一、文档综述1.1版本历史 制订时间 制订人 制订内容 2021.06.13 Max 撰写文档 1.2输出环境 文档名称 云迹扶教A_公益类app用户画像描述

std::string转QString中文乱码_c++ 中文 string 转qstring乱码-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏8次。std::string cstring;QString qstring;//从std::string 到QStringqstring = QString(QString::fromLocal8Bit(cstring.c_str()));//从QString 到 std::stringcstring = std::string((const char *)qstring.toLocal8Bit().constData());_c++ 中文 string 转qstring乱码

html符号中文含义大全特殊,中文标点符号大全名称-程序员宅基地

文章浏览阅读2.6k次。中文的标点符号包括句号,逗号,感叹号,问号,引号,冒号等等,接下来分享常见的中文标点符号名称。常见的中文标点符号1.句号:【。】用于句子末尾,表示陈述语气。有时也可表示较缓和的祈使语气和感叹语气。2.问号:【?】用于句子末尾,表示疑问语气(包括反问、设问等疑问类型)。在多个问句连用或表达疑问语气加重时,可叠用问号。3.叹号:【!】用于句子末尾,主要表示感叹语气,有时也可表示强烈的祈使语气、反问语气..._html顿号

【加密算法】5 种常见的摘要、加密算法_摘要加密-程序员宅基地

文章浏览阅读994次。那么上面提到的这些能力,我们都可以利用哪些加密算法来实现呢?咱们接着往下看。加密算法整体上可以分为:不可逆加密、可逆加密。可逆加密又可以分为:对称加密、非对称加密。_摘要加密

引用形参和指针形参的比较_函数用形参 指针哪个效率高-程序员宅基地

文章浏览阅读1k次。指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?  首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针_函数用形参 指针哪个效率高

推荐文章

热门文章

相关标签