如何解决根据many2one字段的条件设置显示one2many列表的过滤器? (Odoo 13)
我正在尝试根据 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列表的记录。
请帮忙!
谢谢!
解决方法
最后,我解决了我的要求。 像这样在 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' 中的值。然后当点击“添加一行”链接时,它不会显示任何内容,并引发通知。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。