如何判断Odoo中Many2many字段是否包含指定值?
如何高效判断记录是否存在于Odoo的Many2many字段中
嘿,这个需求太常见了!你之前用循环遍历的方式虽然能实现,但确实不够简洁。直接用id in my_own_m2m不行的原因是:Odoo的Many2many字段返回的是记录集(recordset),不是ID列表,Python会把你传入的ID当成一个单独的对象去和记录集里的记录实例对比,自然匹配不上。
下面给你两种更优雅的可行方法:
方法一:直接用记录对象判断(推荐)
Odoo的记录集原生支持in操作符来判断某个记录是否存在于其中,不用手动处理ID:
# 先获取目标记录 target_record = self.env.ref('some_external_id') # 直接判断记录是否在Many2many字段的记录集中 if target_record in self.my_own_m2m: hooray_i_found_it = True
这种方式更符合Odoo ORM的设计思路,代码可读性更高,也避免了手动处理ID可能出现的错误。
方法二:转成ID列表后判断
如果你确实需要基于ID来判断,可以通过ids属性把记录集转成ID列表,再用in操作符:
target_id = self.env.ref('some_external_id').id # 提取Many2many字段的所有ID组成列表 if target_id in self.my_own_m2m.ids: hooray_i_found_it = True
这种方式和你最初的思路最接近,只是多了一步把记录集转成ID列表的操作。
对比你原来的循环写法,这两种方法都更简洁高效,尤其是方法一,在记录集比较大的时候性能也更好,因为Odoo内部对记录集的in操作做了优化。
内容的提问来源于stack exchange,提问作者strike_noir
相关产品推荐
相关产品推荐

