Django合并多个查询集(同一模型)

0g0grzrc  于 2023-04-22  发布在  Go
关注(0)|答案(3)|浏览(154)

我有一个查询集列表(所有查询集都用于同一模型):

results = Entry.objects.all()
result_elms = []
if city_list:
    for city in city_list:
    result_elms.append(results.filter(address__city__icontains=city))

if county_list:
    for county in county_list:
        results_elms.append(results.filter(address__county__icontains=county))
#other filters here, daynamically created

#how can I combine all results_elms (querysets) into one?

我知道我可以使用|操作符来合并来自同一模型的查询集。但是我如何将它应用于result_elms列表中的所有元素?

lfapxunr

lfapxunr1#

您可以使用Q对象:

from django.db.models import Q

results = Entry.objects.all()
q = Q()
for city in city_list:
    q = q | Q(address__city__icontains=city)
results.filter(q)

文档(https://docs.djangoproject.com/en/1.7/topics/db/queries/#complex-lookups-with-q)有更多的细节和示例。

yqkkidmi

yqkkidmi2#

如果你使用的是Django 1.11以上版本,那么这是一个一行程序。

final_results = result_elms[0].union(*result_elms[1:])

这里是文档的链接。你可以参考我的blog post来获得更多的例子。

wbrvyc0a

wbrvyc0a3#

如果您使用的是Django 3.2或更高版本,则如下所示

>>> qs1 = Author.objects.values_list('name')
>>> qs2 = Entry.objects.values_list('headline')
>>> qs1.union(qs2).order_by('name')

这里是文档的链接。

相关问题