如果我在 api.onchange 方法中更改字段值,它不会在视图中更新。为什么?

If I change a field value in an api.onchange method, it's not updated in the view. Why?

我有一个函数在 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} }

也许您必须 select 要删除产品的 bom_line_ids 上的哪条记录,因为 self.bom_line_ids 是一对多的。

替换

self.bom_line_ids.product_id = False

来自

j.product_id = False 

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

Odoo 中有一个关于此的问题。 Someone already made a pull request.

您也可以检查其他问题以手动解决问题:

是的,它发生了。当您尝试通过 onchange 方法为字段设置值时,更改不会出现在视图中。但是字段值确实发生了变化。我通过设置 'compute in the field property and the function set here is the same as in the 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