我刚刚完成了一个教程,用户可以在其中搜索城市,但是可以只输入一个城市。如果我想同时搜索布达佩斯奥斯陆,那是不可能的。您知道我可以添加些什么来更改它吗?
观看次数:
from django.views.generic import TemplateView, ListView
from django.db.models import Q
from .models import City
class HomePageView(TemplateView):
template_name='home.html'
class SearchResultsView(ListView):
model = City
template_name = 'search_results.html'
def get_queryset(self):
query = self.request.GET.get('q')
object_list = City.objects.filter(
Q(name__icontains=query) | Q(state__icontains=query)
)
return object_list
TEMPLATE:
<h1>Search Results</h1>
<ul>
{% for city in object_list %}
<li>
{{ city.name }}, {{ city.state }}
</li>
{% endfor %}
</ul>
答案 0 :(得分:1)
我们可以做这样的事情:
from django.db.models import Q
def get_queryset(self):
queries = self.request.GET.get('q')
queries = queries.split(', ')
q = Q()
for query in queries:
q |= (Q(name__icontains=query) | Q(state__icontains=query))
return City.objects.filter(q)
您可能需要阅读:Complex lookups with Q objects
答案 1 :(得分:0)
您可以过滤多个名称,例如:
City.objects.filter(name__in=list_of_names)
其中list_of_names
是类型list
的对象,例如list_of_names = ['name_1', 'name_2']
我不确定您是如何生成查询的,但是您需要更改它以允许用户输入多个城市。