Я пытаюсь применить ограничение в Odoo 8. Я прочитал свое объяснение и последовал пример:Как работает @ api.constrains в Odoo 8?
Украшает ограничение проверки. Каждый аргумент должен быть именем поля , используемым в чеке. Вызывается в записях, на которых было изменено одно из названных полей . (от https://www.odoo.com/documentation/8.0/reference/orm.html)
Этот декоратор будет гарантировать, что декорированная функция будет вызвана создавать, писать, разъединить операцию. Если выполняется ограничение, функция должна поднять openerp.exceptions.Warning с соответствующим сообщением. (от http://odoo-new-api-guide-line.readthedocs.io/en/latest/decorator.html)
Но он не работает вообще в моем случае. Я сделал ограничение для stock.picking
модели, которая зависит от state
поля (в начале это зависело от picking_type_id
, state
и move_lines
полей, но я изменил, что для упрощения задачи):
@api.one
@api.constrains('state')
def _check_lot_in_outgoing_picking(self):
_logger.info('MY CONSTRAINT IS CALLED')
if self.picking_type_id.code == 'outgoing' and \
self.state not in ['draft', 'cancel'] and \
any(not move.restrict_lot_id for move in self.move_lines):
raise ValidationError(
_('The lot is mandatory in outgoing pickings.')
)
Проблема в том, что ограничение является когда я создаю новый сбор и не больше раз. Если я отмечаю, что делать, подтверждать или переносить выбор, его состояние изменяется, но ограничение больше не вызывается.
Что-нибудь я пропустил? Кто-нибудь может мне помочь?
Поместите свое ограничение с помощью функции рабочего процесса –