2015-10-15 6 views
2

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

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

@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} } 

ответ

0

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

Заменить

self.bom_line_ids.product_id = False 

по

j.product_id = False 

или

self.bom_line_ids[self.bom_line_ids.index(j)].product_id = False 
+0

привет, спасибо за ваш ответ! Я попробовал, что сказал u, но self.bom_line_ids [self.bom_line_ids.index (j)]. Product_id = False дал мне ошибку, что mrp.bom.line не имеет атрибута Index. j.product_id = False результаты для поля product_id в представлении, которое продолжает оставаться выбранным мной значением, когда распечатка еще показывает, что она пуста. Когда я сохраняю BoM, значение product_id также сохраняется в db, .. – Jesse

0

Да это происходит. Когда вы пытаетесь установить значение для поля с помощью метода 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