_sql_constraints
означает, что он будет установить ограничение на PostGreSQL стороне базы данных.
_sql_constraints = [
('email_uniq', 'unique(email)', ' Please enter Unique Email id.'),
]
Где:
email_uniq
означает имя ограничения,
unique(email)
означает unique
это имя ограничения. email
- это имя поля, которое ограничение применимо к этому полю.
'Please enter Unique Email id.'
- это сообщение, которое будет отображаться во всплывающем окне, если ограничение будет нарушено.
_constraints
является ограничителем python. Мы можем дать нашу логику устанавливать ограничения. Например:
_constraints = [
(_check_qty_and_unitprice, u'Qty must be more than 0', ['product_qty', 'cost_unit']),
]
Где:
_check_qty_and_unitprice
это имя функции, где мы должны применить нашу логику.
'Qty must be more than 0'
- это сообщение, которое будет отображаться во всплывающем окне, если ограничение будет нарушено (функция python возвращает False
).
['product_qty', 'cost_unit']
- это список имен полей, которые означают, что ограничение будет срабатывать для этих двух полей.
В новой Odoo APIpython constraint
имеют новый и простой декоратора. Нижеприведенный пример можно написать следующим образом:
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")