合并两个 django 查询集而不改变顺序

问题描述 投票:0回答:2

我需要对查询集进行两种不同的过滤。

qs1 = qs.filter(name=value)
qs2 = qs.filter(equipment_set__name=value)

然后我需要在不改变顺序的情况下连接它们,就像它们被创建一样。

qs_result = <QuerySet [<qs1 >, <qs2>,]

django django-queryset django-orm
2个回答
1
投票

您可以使用

.union(…)
 [Django-doc]:

qs_result = qs1.union(qs2, all=True)

这可以多次产生相同的项目。为了防止这种情况,您删除

all=True
:

qs_result = qs1.union(qs2)  # without duplicates

0
投票

您可以使用 |运算符合并两个查询而不更改查询集中实例的顺序

queryset_1 = A.objects.filter(id__in=[2, 5])
queryset_2 = A.objects.filter(id__in=[3, 4])

queryset_3 = queryset_1 | queryset_2

您也可以稍后对其进行过滤。

© www.soinside.com 2019 - 2024. All rights reserved.