【问题标题】:How to make a constraint on a fields如何对字段进行约束
【发布时间】:2017-05-24 14:53:42
【问题描述】:

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

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

我正在使用 odoo 10。

【问题讨论】:

  • 而不是 self.env.vat 只需提供字段名称(在您的情况下为 TIN)

标签: openerp odoo-10


【解决方案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!")

【讨论】:

  • 很好解释的答案
【解决方案2】:
_sql_constraints = [('unique_tin_no', 'unique(field_name)', 'It already exists another company with the same TIN!')]

【讨论】:

  • 请尽量避免仅仅将代码作为答案,并尝试解释它的作用和原因。对于没有相关编码经验的人来说,您的代码可能并不明显。
【解决方案3】:

你的生产线有小变化,你的约束正常工作

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

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

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 2020-12-18
    • 2019-07-09
    • 2014-06-28
    • 1970-01-01
    相关资源
    最近更新 更多