“模型约束”的版本间的差异

来自Odoo大V社-odoo中文开发手册
跳转至: 导航搜索
(创建页面,内容为“为了加强数据完整性,模型还支持两种类型的约束:SQL和Python。SQL约束添加到L数据库表定义和直接PostgreSQL执行。他们是使用s...”)
 
 
第30行: 第30行:
  
 
chars!')
 
chars!')
 +
 +
上一节:[[关联字段]] 下一节:[[第五章 小结]]

2017年5月4日 (四) 05:57的最新版本

为了加强数据完整性,模型还支持两种类型的约束:SQL和Python。SQL约束添加到L数据库表定义和直接PostgreSQL执行。他们是使用sql_constraints定义的类属性。这是一个列表的元组:约束标识符名称;约束的SQL,供使用的错误消息。一个常见的用例是为模型添加唯一的约束。假设我们不想让活动任务具有相同标题:

# class TodoTask(models.Model):

_sql_constraints = [

('todo_task_name_uniq',

'UNIQUE (name, active)',

'Task title must be unique!')]

Python约束可以使用一段任意代码来检查条件。检查函数应该使用@api.constraints 修饰,说明被检查的字段的列表。当其中任何一个被修改,并且在条件失败时将会抛出一个异常,验证就会被触发。

例如,为了验证任务名称至少有五个字符长,我们可以添加以下约束:

from odoo.exceptions import ValidationError

# class TodoTask(models.Model):

@api.constrains('name')

def _check_name_size(self):

for todo in self:

if len(todo.name) < 5:

raise ValidationError('Must have 5

chars!')

上一节:关联字段 下一节:第五章 小结