2015-07-31 11 views
5

Zauważyłem, że istnieją dwa rodzaje ograniczeń na Odoo ERP. Ale chcę wiedzieć, jaka jest różnica między _sql_constraints vs _constraints?Różnica między _sql_constraints i _constraints w OpenERP/Odoo?

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

_constraints=[ 
    (_check_qty_and_unitprice, u'Qty must be more than 0',['product_qty', 'cost_unit']), 
] 

Odpowiedz

6

_sql_constraints oznacza, że ​​ustawi ograniczenie po stronie bazy danych PostgreSQL.

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

Gdzie:

  • email_uniq oznacza nazwa ograniczenia,

  • unique(email) oznacza unique jest nazwa ograniczenia. email to nazwa pola, które będzie obowiązywało w tym polu.

  • 'Please enter Unique Email id.' to wiadomość, która zostanie wyświetlona w oknie pop-up, gdy naruszenie zostanie naruszone.

_constraints jest ograniczeniem python. Możemy podać naszą logikę, aby ustawić ograniczenia. Na przykład:

_constraints = [ 
    (_check_qty_and_unitprice, u'Qty must be more than 0', ['product_qty', 'cost_unit']), 
    ] 

gdzie:

  • _check_qty_and_unitprice to nazwa funkcji, gdzie musimy zastosować naszą logikę.

  • 'Qty must be more than 0' to wiadomość, która zostanie wyświetlona w oknie pop-up, gdy naruszone zostanie naruszenie (funkcja Pythona zwraca False).

  • ['product_qty', 'cost_unit'] to lista nazw pól, która oznacza, że ​​wiązanie będzie uruchamiane dla tych dwóch pól.

W nowej Odoo APIpython constraint mają nowe i prostsze dekorator. Poniższy przykład można zapisać w następujący sposób:

from openerp.exceptions import ValidationError 

@api.constraints('product_qty', 'cost_unit') 
def _check_something(self): 
    for record in self: 
     if record.product_qty < 1: 
      raise ValidationError("Qty must be more than 0") 
Powiązane problemy