Odoo-数据校验约束问题

Odoo的数据约束抛错可分为三种情况

  1. 手动判断约束(create/write)
  2. ORM层约束(api constrains)
  3. 数据库层约束(_sql_constrains)

从系统的执行优先级来看,顺序依次是 手动判断约束 -> 数据库层约束 -> ORM层约束

三种约束尽量不要同时使用,比如如果使用了手动判断约束,如果再添加了ORM层约束,通过ORM的search或者search_count方法搜出来的数据是包含当前正在创建并没有写入数据库的数据项。

1.手动约束:通过在model的create或者write方法中写条件判断,然后手动raise信息,这样可以控制抛错逻辑和抛错提示信息,比较常见。但需要注意的是,也许create/write的vals中需要校验的字段不一定是必输的,也就是说vals中可能缺失需要校验的值,这个一定好考虑到。
Odoo-数据校验约束问题

2.ORM层约束:通过写@api.constrains方法,来对数据库列进行进在这里插入图片描述行判断,可以控制判断逻辑和抛错。但需要注意,如果新创建单据的话,这个地方通过ORM会搜索到新创建的记录对象,可能需求是校验唯一性,这样的话ORM方法来判断就不是适用了。而且只有单据执行create和write方法后,才能走此校验api.
Odoo-数据校验约束问题

3.数据库层约束:直接给数据库表添加约束条件,无论是前台还是后台创建数据都会被校验,缺点是不能不能自己写复杂的判断逻辑,而且抛错会抛系统的key重复错误之类的。
Odoo-数据校验约束问题

1-2抛错:Odoo-数据校验约束问题
3抛错:Odoo-数据校验约束问题