如何在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
相关产品推荐
相关产品推荐

