【问题标题】:Set the filter for one2many list showing based on the condition of many2one field? (Odoo 13)根据many2one字段的条件设置one2many列表显示的过滤器? (奥多 13)
【发布时间】:2021-03-18 09:19:33
【问题描述】:

我正在尝试根据 many2one 字段的条件为 one2many 列表显示设置过滤器。

model_a.py:

 name = fields.Many2one('hr.employee')
 keya = fields.Many2one('model.b')
 num_a = fields.Monetary()

model_b.py:

 name = fields.Many2one('hr.employee')
 o_2_m = fields.One2many('model.a', 'keya', string='one2many list will be filter base on num_c')
 value_c = fields.Many2one('model.c', string='Value of C', required= True)

model_c.py:

 _rec_name = "code_c"
 code_c = fields.Char('Code', required= True)
 num_c = fields.Monetary()

默认情况下,如果用户不选择value_c的记录,one2many列表将显示所有记录。

如果用户通过 value_c 字段选择记录,该字段已创建包含 num_c 的值,则 one2many 列表将根据 num_c 的值过滤显示。

例如:如果 one2many 字段中的 num_a 为:15

那么当用户填写num_c字段时:也是:15

然后 one2many 列表只显示所有具有值的记录:15

这是one2many列表过滤的关键条件。

我曾尝试在 model_b.py 中使用这些代码:

 @api.onchange('value_c')
 def onchange_value_c(self):
    for rec in self:
       if rec.value_c and rec.o_2_m:
          for line in rec.value_c:
             find_c = self.env["model.c"].search([('num_c', '=', line.num_c)])
             find_a = self.env["model.a"].search([('num_a', '=', line.num_a)])
             #compare value of num_c with num_a
             if find_c.num_c == find_a.num_a:
                 for abc in rec.o_2_m:
                    return {'domain': {'o_2_m': [('num_a','=', abc.find_a.id)]}}

但它仍然无法正常工作。在选择 value_c 的记录并点击“添加一行”链接后,它仍然显示所有 one2many 列表的记录。

请帮忙!

谢谢!

【问题讨论】:

    标签: filter onchange odoo-13 one2many


    【解决方案1】:

    最后,我解决了我的要求。 像这样在 model_b.py 中使用 onchange 函数:

    @api.onchange('value_c') 
    def onchange_get_value_c(self): 
      for rec in self: 
         if rec.value_c:
            for line in rec.value_c: 
                find_c = self.env["model.c"].search([('num_c', '=', line.num_c)])
    
                if find_c:
                     return {'domain': {'o_2_m': [('num_a','=', find_c.num_c)]}}
    

    当用户选择在字段 'num_c' 中具有值的 many2one 'value_c' 字段时,它可以正常工作,然后当单击“添加行”链接时,它将显示在字段 'num_a' 中具有值的所有记录匹配或等于字段“num_c”中的值。 如果用户选择了 many2one 'value_c' 字段但未设置字段 'num_c' 的值,或者该值不匹配或等于字段 'num_a' 中的值。然后当点击“添加一行”链接时,它不会显示任何内容,并提出通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多