2017-05-24 2 views
0

Ich möchte eine Kontrolle auf ein Feld (TIN) setzen, so dass jedes Mal, wenn ich einen neuen Kunden erstellen, die TIN eindeutig sein sollte. Wenn ein anderer Kunde diese TIN hat, muss eine Fehlermeldung angezeigt werden. Ich habe versucht, diese Syntax:Wie Sie eine Einschränkung für Felder machen

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

Ich verwende odoo 10.

+0

statt self.env.vat einfach den Feldnamen geben (TIN in Ihrem Fall) –

Antwort

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

Bitte versuchen Sie es einfach zu vermeiden Code als Antwort Dumping und versuchen zu erklären, was sie tut und warum. Ihr Code ist möglicherweise nicht offensichtlich für Personen, die nicht über die entsprechende Codiererfahrung verfügen. – Frits

0

Kleine Änderung in Ihrer Linie und Ihre constrain Arbeit richtig

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

Sie gerade brauchen "vat" anstelle von "self.env.vat" setzen sql_constrains benötigt nur den Feldnamen, der auf die darunter liegende DB-Tabelle angewendet wird.

1

Einschränkungen können zwei Arten sein.

  • Anwendungseinschränkungen
  • Datenbank Constraints

Datenbank Constraints

Datenbank Einschränkungen wird die Validierung auf Datenbankebene hinzufügen, während Sie das Modul aktualisieren. Datenbankeinschränkungen sind eine Liste von Tupeln, in denen Tupel drei Argumente enthält.

_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. Einschränkungen nennen
  2. Einschränkungen, wie einzigartig, eindeutige Einschränkungen überprüfen zu viele Spalten angewendet werden.
  3. Fehlermeldung

Beispiel:

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

Mehrere Datenbankbeschränkungen zusammengerechnet werden können.

Anwendung Constraints

wird Anwendungseinschränkungen verwendet benutzerdefinierte Validierung zum Zeitpunkt der Aufzeichnung Feuer hinzufügen, aktualisieren und löschen. Kurz gesagt, Ihre benutzerdefinierte Methode wird aufgerufen, wenn Änderungen mit Datensatz auftreten.

So definieren Sie Constrains im Code.

@api.constrains('field1','field2'....) 

Constrains können zusammen auf mehrere Felder angewandt werden, können Sie auch separat definieren.

@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

gut erklärte Antwort –

Verwandte Themen