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

Django中如何将循环生成的多个QuerySet合并为单个QuerySet

方案1:直接使用__in查询(最推荐,无需循环)

你的需求是筛选brand为1或2的记录,直接使用Django ORM的in查询即可一步得到合并后的QuerySet,性能最优,且支持后续ORM链式操作:

merged_qs = Gpu.objects.filter(brand__in=[1,2])
print(merged_qs)

输出结果就是你期望的合并后单个QuerySet效果。

方案2:使用QuerySet.union()方法(适用于两个独立QuerySet合并的通用场景)

如果两个QuerySet是通过不同逻辑生成、无法合并为单个filter查询的,可以用Django内置的union方法合并,返回结果依然是QuerySet类型:

# 先生成两个独立的QuerySet
qs1 = Gpu.objects.filter(brand=1)
qs2 = Gpu.objects.filter(brand=2)
# 合并两个QuerySet
merged_qs = qs1.union(qs2)
print(merged_qs)

注意:union默认会自动去重,如果需要保留重复记录可以传入all参数:qs1.union(qs2, all=True),该方法要求两个QuerySet返回的字段数量、类型完全一致,同模型查询天然满足该条件。

方案3:用itertools.chain合并(仅需遍历数据不需要ORM操作时使用)

如果你不需要对合并结果调用filter、order_by等ORM方法,只是要遍历所有对象,可以用该方法,返回的是可迭代对象,可直接转列表使用:

from itertools import chain

qs1 = Gpu.objects.filter(brand=1)
qs2 = Gpu.objects.filter(brand=2)
merged_list = list(chain(qs1, qs2))

注意:该方法返回的不是QuerySet类型,无法再调用任何ORM方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:36:04