2015-07-20 7 views
5

Próbowałem unikalny w sql_constaints w OpenERP (Odoo) przy użyciu dwóch różnych metod za pomocą nawiasów klamrowych {} lub nawiasów kwadratowych []. Oba działa dobrze. Który z nich jest poprawny?Jaki jest poprawny format użycia Unique w _sql_constraints w OpenERP?

_sql_constraints = { 
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.') 
    } 

(lub)

_sql_constraints = [ 
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.') 
    ] 

P.S: Ale jeśli chcesz używać więcej niż ograniczenie to akceptując tylko nawiasy kwadratowe [] Podobnie jak w tym przykładzie.

_sql_constraints = [ 
    ('email_uniq', 'unique(email)', ' Please enter Unique Email id.'), 
    ('contact_uniq', 'unique(contact)', ' Please enter Unique Mobile no.') 
    ] 

Jaki jest tego powód?

Odpowiedz

7

Poprawna jest składnia nawiasów kwadratowych.

  1. można grep na _sql_constraints i zobaczyć to, co jest zawsze używany,

  2. w kodzie ORM w openerp/models.py widzimy, że wartość domyślna jest pusta lista:

_sql_constraints = [] 
    #... 
     cls._local_sql_constraints = cls.__dict__.get('_sql_constraints', []) 
  1. w Odoo 8.0 documentation jest powiedziane:

lista (name, sql_definition, message) trzykrotnie definiująca wiązania SQL do wykonania podczas generowania tabeli podkładu.

W python2 można uzyskać list ze składnią [].

Składnia {} albo powoduje:

  • dictionary jeśli jest pusty {} lub jeśli są przyciskami Takie wartości: {'keyA': 'valueA', 'keyB': 'valueB'},
  • jak pytona 2.7 set jeśli wystąpienia tak: {'value1', 'valueB', 42}
+1

Ale tworzy _sql_constraints, kiedy używam {}. Nawet dla wielu ograniczeń. –

+1

@ ea- +1 dla Nice wyjaśnienia! –

+1

@TintuMon może działać przez szczęście w rdzeniu odoo. Listę i zestaw często można używać zamiennie w pythonie. Użycie zestawu nie przyniosłoby żadnych korzyści i mógłbyś uzyskać błąd z futurystyczną zmianą w Odoo lub z zewnętrznym modułem, który może oczekiwać, że lista ograniczeń sql będzie _list_. –

5

W odoo składnia dla ograniczenia sql to lista (name, sql_definition, message). na przykład:

_sql_constraints = [ 
    ('name_uniq', 'unique(name)', 'Custom Warning Message'), 
    ('contact_uniq', 'unique(contact)', 'Custom Warning Message') 
] 

możesz podać więcej niż jedno ograniczenie sql na liście krotek.

po zdefiniowaniu słownika bez klucza & wartość python traktować jako zestaw. i zestaw może być dostępny.

Powiązane problemy