Django结合了多个查询集(相同模型)

时间:2017-11-11 10:01:35

标签: python django django-models

我有查询集列表(所有相同型号):

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列表中的所有元素?

2 个答案:

答案 0 :(得分:5)

您可以使用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)包含更多详细信息和示例。

答案 1 :(得分:-1)

如果你至少使用Django 1.11,这是一个单行。

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

这是指向documentaion的链接。您可以参考我的blog post了解更多示例。