如何对字段进行约束

时间:2017-05-24 14:53:43

标签: openerp odoo-10

我想对字段(TIN)进行控制检查,这样每次创建新客户时,TIN都应该是唯一的。如果其他客户具有该TIN,则必须显示错误消息。 我尝试了这种语法:

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

我正在使用odoo 10。

3 个答案:

答案 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'),
 ]
  1. 约束名称
  2. 限制,如唯一,检查    唯一约束可以应用于许多列。
  3. 错误消息
  4. 示例:

    _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表上应用的字段名称。