2017-05-24 4 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

は単に –

答えて

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

だけの答えとしてコードをダンプ回避しようとそれがないと、なぜかを説明してみてください、フィールド名(あ​​なたのケースでTIN)を得ました。関連するコーディング経験を持っていない人にとっては、あなたのコードは明らかではないかもしれません。 – Frits

0

小さな変更が正しくラインとあなたの制約の仕事である

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

を使用しています"self.env.vat"の代わりに "vat"を入れるsql_constrainsは、下のDBテーブルに適用されるフィールド名を必要とします。

1

制約は2種類あります。あなたがそのモジュールをアップグレードしながら、

  • アプリケーションの制約
  • データベース制約

データベース制約

データベースの制約は、データベースレベルでの検証を追加します。データベース制約はタプルのリストであり、タプルには3つの引数が含まれます。

_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'....) 

制約を複数のフィールドに同時に適用することもできますが、別々に定義することもできます。代わりにself.env.vatの

@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

よく解説された回答 –

関連する問題