在OpenERP中_sql_constraints中使用Unique的正确格式是什么?

Tin*_*n M 5 openerp openerp-7 openerp-8 odoo odoo-8

我使用花括号{}或方括号[]使用两种不同的方法在OpenERP(Odoo)中尝试使用sql_constaints中的unique.两者都很好.哪一个是正确的?

_sql_constraints = {
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.')
    }
Run Code Online (Sandbox Code Playgroud)

(要么)

_sql_constraints = [
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.')
    ]
Run Code Online (Sandbox Code Playgroud)

PS:但是如果我想使用的不仅仅是约束,它只接受方括号[],就像这个例子一样.

_sql_constraints = [
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.'),
    ('contact_uniq', 'unique(contact)', ' Please enter Unique Mobile no.')
    ]
Run Code Online (Sandbox Code Playgroud)

它背后的原因是什么?

小智 7

正确的是方括号语法.

  1. 你可以_sql_constraints看看它是永远使用的,

  2. 在ORM代码中openerp/models.py我们可以看到默认值是一个空列表:

    _sql_constraints = []
    #...
        cls._local_sql_constraints = cls.__dict__.get('_sql_constraints', [])
Run Code Online (Sandbox Code Playgroud)
  1. Odoo 8.0文档中说:

(name, sql_definition, message)定义在生成支持表时要执行的SQL约束的三元组列表.

在python2中,您可以获得包含语法的列表[].

语法{}要么创建:

  • 一个字典,如果它是空的{}或如果有这样的键值:{'keyA': 'valueA', 'keyB': 'valueB'},
  • 从python 2.7 开始,如果实例化如下:{'value1', 'valueB', 42}


Atu*_*ind 5

在odoo中,sql约束的语法是列表(name, sql_definition, message).例如

_sql_constraints = [
    ('name_uniq', 'unique(name)', 'Custom Warning Message'),
    ('contact_uniq', 'unique(contact)', 'Custom Warning Message')
]
Run Code Online (Sandbox Code Playgroud)

你可以在元组列表中给出多个sql约束.

当你定义一个带有键和值的字典时,python将其视为集合.和设置可以是可以听到的.