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

时间:2015-07-20 09:45:48

标签: openerp odoo openerp-7 odoo-8 openerp-8

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

_sql_constraints = {
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.')
    }

(或)

_sql_constraints = [
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.')
    ]

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

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

背后的原因是什么?

2 个答案:

答案 0 :(得分:7)

正确的是方括号语法。

  1. 你可以在_sql_constraints上查看并查看它是常用的,

  2. openerp/models.py的ORM代码中,我们可以看到默认值为空列表:

  3.     _sql_constraints = []
        #...
            cls._local_sql_constraints = cls.__dict__.get('_sql_constraints', [])
    
    1. Odoo 8.0 documentation中说:
    2.   

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

      在python2中,您可以使用语法[]获得list

      语法{}要么创建:

      • dictionary如果它为空{}或者有如下键值:{'keyA': 'valueA', 'keyB': 'valueB'}
      • 从python 2.7开始set如果实例化如下:{'value1', 'valueB', 42}

答案 1 :(得分:5)

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

_sql_constraints = [
    ('name_uniq', 'unique(name)', 'Custom Warning Message'),
    ('contact_uniq', 'unique(contact)', 'Custom Warning Message')
]

你可以在元组列表中提供多个sql约束。

当你定义一个没有键和字母的词典时value python将其视为集合。并且设置可以是可用的。