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
正确的是方括号语法.
你可以_sql_constraints
看看它是永远使用的,
在ORM代码中openerp/models.py
我们可以看到默认值是一个空列表:
_sql_constraints = []
#...
cls._local_sql_constraints = cls.__dict__.get('_sql_constraints', [])
Run Code Online (Sandbox Code Playgroud)
(name, sql_definition, message)
定义在生成支持表时要执行的SQL约束的三元组列表.
在python2中,您可以获得包含语法的列表[]
.
语法{}
要么创建:
{}
或如果有这样的键值:{'keyA': 'valueA', 'keyB': 'valueB'}
,{'value1', 'valueB', 42}
在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将其视为集合.和设置可以是可以听到的.