You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:57:42