我想对字段(TIN)进行控制检查,这样每次创建新客户时,TIN都应该是唯一的。如果其他客户具有该TIN,则必须显示错误消息。 我尝试了这种语法:
_sql_constraints=[('uniq_vat', 'UNIQUE(self.env.vat)',
'It already exists another company with the same TIN!')]
我正在使用odoo 10。
答案 0 :(得分:2)
约束可以有两种类型。
数据库约束
数据库约束将在升级该模块时在数据库级别添加验证。数据库约束是元组列表,其中元组包含三个参数。
_sql_constraints = [
('constrain name', 'unique(field1, field2)', 'error message which you want to raise on constrains violation'),
('constrain name', 'constrains defination', 'error message which you want to raise on constrains violation'),
]
示例:
_sql_constraints = [
('uniq_vat', 'unique(vat)', 'It already exists another company with the same TIN!'),
]
可以一起添加多个数据库约束。
应用程序限制
应用程序约束用于在记录添加,更新和删除时触发自定义验证。简而言之,如果记录发生任何变化,将调用自定义方法。
如何在代码中定义约束。
@api.constrains('field1','field2'....)
约束可以一起应用于多个字段,也可以单独定义。
@api.constrains('vat')
def check_vatnumber(self):
for record in self:
obj = self.search([('vat','=',record.vat),('id','!=',record.id)])
if obj:
raise Warning("Warning", "It already exists another company with the same TIN!")
答案 1 :(得分:1)
_sql_constraints = [('unique_tin_no', 'unique(field_name)', 'It already exists another company with the same TIN!')]
答案 2 :(得分:0)
_sql_constraints=[('uniq_vat', 'unique(vat)', 'It already exists another company with the same TIN!')]
你只需要用“vat”代替“self.env.vat”sql_constrains只需要在下面的DB表上应用的字段名称。