我有查询集列表(所有相同型号):
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
列表中的所有元素?
答案 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了解更多示例。