我试图根据 many2one 字段的条件为 one2many 列表显示设置过滤器。
模型_a.py:
name = fields.Many2one('hr.employee')
keya = fields.Many2one('model.b')
num_a = fields.Monetary()
模型_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)
模型_c.py:
_rec_name = "code_c"
code_c = fields.Char('Code', required= True)
num_c = fields.Monetary()
默认情况下,如果用户不选择 value_c 的记录,则 one2many 列表将显示所有记录。
如果用户通过 value_c 字段选择记录,该字段已创建包含 num_c 的值,则将根据 num_c 的值过滤 one2many 列表以显示。
例如:如果 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 列表的记录。
请帮忙!
谢谢!