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

如何在Odoo的One2many/Many2many字段中获取非活跃记录?

解决One2many字段只返回活跃记录的问题

你遇到的这个情况是Odoo ORM的默认行为:对于带有active字段的模型,Odoo会自动给查询添加active = True的过滤条件,所以One2many关联字段默认只会拉取活跃状态的记录。下面给你两种更优的实现方式,比手动写search更简洁:

1. 全局修改One2many字段定义(一劳永逸)

直接在Person模型的pet_ids字段里添加context={'active_test': False},这样后续任何地方访问这个字段都会返回所有关联宠物,不管活跃状态:

class Person(models.Model):
    _name='person'
    pet_ids = fields.One2many(
        comodel_name='pet', inverse_name='owner_id', string='Pets',
        context={'active_test': False}  # 关键配置
    )

原理是active_test=False会告诉Odoo的ORM不要自动注入active=True的过滤域,这样关联查询就会返回所有符合条件的记录,包括非活跃的。

2. 临时获取所有记录(不修改全局配置)

如果只是在某个特定业务场景下需要获取所有宠物,不想改变字段的默认行为,可以在访问字段时手动传入上下文:

# 临时获取该用户的所有宠物(含非活跃)
all_pets = person.pet_ids.with_context(active_test=False)

这种方式灵活,不会影响其他地方使用pet_ids的默认行为。

对比你现在用的search写法,上面两种方式更符合Odoo的ORM设计规范,代码更简洁,也不用重复编写查询条件~

内容的提问来源于stack exchange,提问作者forvas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:38