多搜索DJANGO

时间:2019-09-29 08:48:43

标签: python django search

我刚刚完成了一个教程,用户可以在其中搜索城市,但是可以只输入一个城市。如果我想同时搜索布达佩斯奥斯陆,那是不可能的。您知道我可以添加些什么来更改它吗?

观看次数:

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>

2 个答案:

答案 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']

我不确定您是如何生成查询的,但是您需要更改它以允许用户输入多个城市。