2017-05-24 51 views
0

我想对字段(TIN)进行控制检查,以便每次创建新客户时,TIN都应该是唯一的。如果其他客户拥有该TIN,则必须显示错误消息。 我想这句法:如何对字段进行约束

_sql_constraints=[('uniq_vat', 'UNIQUE(self.env.vat)', 
'It already exists another company with the same TIN!')] 

我使用odoo 10

+0

,而不是简单地self.env.vat要给外地的名字(你的情况TIN) –

回答

1
_sql_constraints = [('unique_tin_no', 'unique(field_name)', 'It already exists another company with the same TIN!')] 
+0

请尽量避免刚刚倾倒的代码作为一个答案,并试图解释它做什么,以及为什么。对于那些没有相关编码经验的人来说,你的代码可能并不明显。 – Frits

0

小的变化是在你行,你的约束正常工作

_sql_constraints=[('uniq_vat', 'unique(vat)', 'It already exists another company with the same TIN!')] 

你只需要将“vat”替换为“self.env.vat”sql_constrains只需要将要应用于下面的数据库表的字段名称。

1

约束可以有两种类型。

  • 应用约束
  • 数据库约束

数据库约束

数据库的约束将在数据库级别添加验证,而你升级模块。数据库约束是元组列表,其中元组包含三个参数。

_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'), 
] 
  1. 约束命名
  2. 约束,喜欢独特的,检查 唯一约束可以应用到许多列。
  3. 错误消息

实施例:

_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!") 
+0

很好地解释了答案 –