Ограничения модели

Odoo предоставляет два способа настройки автоматически проверяемых инвариантов: ограничения Python <openerp.api.constrains> `и ограничения SQL <openerp.models.Model._sql_constraints> `.

Ограничение Python определяется как метод, украшенный ~ openerp.api.constrains и вызываемый для набора записей. Декоратор определяет, какие поля участвуют в ограничении, поэтому ограничение автоматически оценивается при изменении одного из них. Ожидается, что метод вызовет исключение, если его инвариант не выполняется:

from openerp.exceptions import ValidationError

@api.constrains('age')
def _check_something(self):
    for record in self:
        if record.age > 20:
            raise ValidationError("Your record is too old: %s" % record.age)
    # all records passed the test, don't return anything

Ограничения SQL определяются через атрибут модели ~ openerp.models.Model._sql_constraints. Последний присваивается списку троек строк `` (name, sql_definition, message) , где `` name - допустимое имя ограничения SQL, `` sql_definition`` - выражение `` table_constraint_``, и `` message`` - это сообщение об ошибке.