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_idsmes_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])]