Проблема в odoo 8, отображающем предупреждающее сообщение

#api #warnings #decorator #odoo #onchange

#API #предупреждения #декоратор #odoo #onchange

Вопрос:

Я пытаюсь проверить поле «емкость» с помощью декоратора onchange, но по какой-то причине, когда я отправляю предупреждающее сообщение, предыдущая строка перестает работать. Шаблон обновляет поле нормально, без предупреждения

 @api.onchange('capacity')
def check_capacity_values(self):
    if self.capacity<0:
        self.capacity=0
        raise Warning(_('wrong capacity.'))
  

Ответ №1:

Вы можете использовать словарь в качестве возвращаемого значения для методов, оформленных api.onchange . Ключом для предупреждающих сообщений будет warning , а значением — другой словарь с ключами title и message . Пример:

 return {
    'warning': {'title': "WARNING!",
                'message': "It isn't allowed to have a negative capacity!"}
}
  

Ответ №2:

Я думаю, что проблема может заключаться в том, что изменение, которое вы внесли в self.capacity непосредственно перед выводом предупреждения, не сохраняется в базе данных, потому что вы используете @api.onchange, поэтому новое значение просто отображается в пользовательском интерфейсе, но не сохраняется в базе данных.

Попробуйте вместо этого использовать @api.depends, изменение будет отражено как в пользовательском интерфейсе, так и в базе данных.

Ответ №3:

 @api.onchange('capacity')
def check_capacity_values(self):
    if self.capacity<0:
        self.capacity=0
        return {'warning': {
                    'title': "Warning",
                    'message': "message",
                    }
                }
  

Комментарии:

1. Пожалуйста, объясните свой ответ.