Если я изменяю значение поля в методе api.onchange, оно не обновляется в представлении. Почему?

У меня есть функция, выполняемая в api.onchange('bom_line_ids'), внутри этой функции я хочу иметь оператор if для очистки bom_line_ids, если условие соответствует. Я использовал self.bom_line_ids.product_id = False

но почему-то поле очищается (видел это в отпечатках, но в представлении не обновляется).

@api.onchange('bom_line_ids')
def get_excl_list(self):

     list1 = []
     for i in self.excl_list:
         list1.append(i.id)

     list2 = []
     for j in self.bom_line_ids:
         list2.append(j.product_id.id)

         if j.product_id.id in list1:
             warning_message = "Product: " + self.env['product.template'].search([('id','=',j.product_id.id)]).name + " can't be added to the BoM.\n Please select another product."
             print "self.bom_line_ids.product_id", self.bom_line_ids.product_id
             self.bom_line_ids.product_id = False
             print "self.bom_line_ids.product_id", self.bom_line_ids.product_id

              return { 'warning': {'title': 'Product error', 'message':warning_message} }

person Jesse    schedule 15.10.2015    source источник


Ответы (3)


В Odoo есть проблема, говорящая об этом. Кто-то уже отправил запрос на включение.

Вы также можете проверить этот другой вопрос, чтобы решить проблему вручную: Функция on_change поля One2many не может изменить собственное значение?

person ChesuCR    schedule 19.10.2015

Возможно, вам нужно выбрать, для какой записи в bom_line_ids вы хотите удалить продукт, потому что self.bom_line_ids — это one2many.

Заменять

self.bom_line_ids.product_id = False

by

j.product_id = False 

or

self.bom_line_ids[self.bom_line_ids.index(j)].product_id = False
person Quentin THEURET    schedule 15.10.2015
comment
Привет, спасибо за ваш ответ! Я попробовал то, что вы сказали, но self.bom_line_ids[self.bom_line_ids.index(j)].product_id = False выдал мне ошибку, что mrp.bom.line не имеет индекса атрибута. j.product_id = False результаты для поля product_id в представлении, которое по-прежнему остается выбранным значением, когда распечатка все еще показывает, что оно пустое. Когда я сохраняю спецификацию, значение product_id также сохраняется в БД,.. - person Jesse; 15.10.2015

Да, это случается. Когда вы пытаетесь установить значение для поля с помощью метода onchange, изменение не отображается в представлении. Однако значение поля меняется. Я исправил эту проблему, установив свойство «вычисление в поле», и установленная здесь функция такая же, как и в on_change. Таким образом, значение также обновляется в представлении. Например, ->

job_titles = fields.Char('Job',compute='myemply_name',store=True) 

    @api.onchange('new_empl')
    @api.depends('new_empl')
    def myemply_name(self):
        self.job_titles = value 
person Arsalan Sherwani    schedule 21.10.2015