Odoo 过滤 one2many
Odoo filtered one2many
我有一个带有 one2many
字段 mes_indicator_sub_group_ids
的模型。我试过了,但即使我知道有一个 ID 为 5 的记录,也没有过滤任何东西:
http.request.env['table.test'].sudo().search([('id', '=', int(category))]).filtered(lambda x: x.mes_indicator_sub_group_ids.ids in [5])
我需要的是过滤 table.test
的记录,这些记录在 mes_indicator_sub_group_ids
及其 ID == 5.
中只有一条记录
编辑
我有一个模型 model.mes_indicator_group
,它包含两个 one2many 字段,mes_indicator_sub_group_ids
和 mes_indicator_ids
。我想获取与 id=1 的 model.mes_indicator_group
和 id=5 的 mes_indicator_sub_group_ids
相关的记录集。例如,我想从 first
组和 fifth
子组中获取 mes_indicator_ids。只是获取数据,而不是取消链接或写入。对不起英语不好。
你想过滤在one2many字段中只有一条记录的记录并且它的Id应该是5,只要确保长度是1并且记录的id是5:
http.request.env['table.test'].sudo().search(your_domain).filtered(lambda x: len(x.mes_indicator_sub_group_ids) == 1 and x.mes_indicator_sub_group_ids.id == 5)
不用担心x.mes_indicator_sub_group_ids.id
它不会造成问题,因为它只包含一条记录。
这里的问题是,您将 search([('id', '=', int(category))])
用于此类域,您将始终只有一个记录,如果您写一个 if statement
来解释您正在为您所做的事情会更好团队,当你处理 ID
使用浏览时,它更清楚:
rec = http.request.env['table.test'].sudo().browse(int(category))
if len(rec.mes_indicator_sub_group_ids) == 1 and rec.mes_indicator_sub_group_ids.id == 5):
# do what you need to do with this record
编辑
这里有两种解决方法,如果你想从数据库中完全删除它们,或者你
只想将它们从 one2many 中删除,这取决于您。
rec = http.request.env['table.test'].sudo().browse(int(category))
# this remove all record from database keeps only record with 5
rec.mes_indicator_sub_group_ids.filtered(lambda x : x.id != 5).unlink()
# this will remove the record from the one2many but keeps them in teh database
rec.mes_indicator_sub_group_ids = [(6,0, [5])]
我有一个带有 one2many
字段 mes_indicator_sub_group_ids
的模型。我试过了,但即使我知道有一个 ID 为 5 的记录,也没有过滤任何东西:
http.request.env['table.test'].sudo().search([('id', '=', int(category))]).filtered(lambda x: x.mes_indicator_sub_group_ids.ids in [5])
我需要的是过滤 table.test
的记录,这些记录在 mes_indicator_sub_group_ids
及其 ID == 5.
编辑
我有一个模型 model.mes_indicator_group
,它包含两个 one2many 字段,mes_indicator_sub_group_ids
和 mes_indicator_ids
。我想获取与 id=1 的 model.mes_indicator_group
和 id=5 的 mes_indicator_sub_group_ids
相关的记录集。例如,我想从 first
组和 fifth
子组中获取 mes_indicator_ids。只是获取数据,而不是取消链接或写入。对不起英语不好。
你想过滤在one2many字段中只有一条记录的记录并且它的Id应该是5,只要确保长度是1并且记录的id是5:
http.request.env['table.test'].sudo().search(your_domain).filtered(lambda x: len(x.mes_indicator_sub_group_ids) == 1 and x.mes_indicator_sub_group_ids.id == 5)
不用担心x.mes_indicator_sub_group_ids.id
它不会造成问题,因为它只包含一条记录。
这里的问题是,您将 search([('id', '=', int(category))])
用于此类域,您将始终只有一个记录,如果您写一个 if statement
来解释您正在为您所做的事情会更好团队,当你处理 ID
使用浏览时,它更清楚:
rec = http.request.env['table.test'].sudo().browse(int(category))
if len(rec.mes_indicator_sub_group_ids) == 1 and rec.mes_indicator_sub_group_ids.id == 5):
# do what you need to do with this record
编辑
这里有两种解决方法,如果你想从数据库中完全删除它们,或者你 只想将它们从 one2many 中删除,这取决于您。
rec = http.request.env['table.test'].sudo().browse(int(category))
# this remove all record from database keeps only record with 5
rec.mes_indicator_sub_group_ids.filtered(lambda x : x.id != 5).unlink()
# this will remove the record from the one2many but keeps them in teh database
rec.mes_indicator_sub_group_ids = [(6,0, [5])]