Python 多搜索DJANGO

Python 多搜索DJANGO,python,django,search,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.htm

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

观点:

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>

您可以按以下方式筛选多个名称:

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)
City.objects.filtername\uuu in=名称列表

其中,名称列表是列表类型的对象,例如名称列表=['name\u 1','name\u 2']


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

我们可以这样做:

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)

您可能需要阅读:

然后我在分配之前引用的/search/local变量'query'处得到错误:UnboundLocalError。很遗憾,然后我得到了名称错误,即Q未定义。在顶部添加此项:from django.db.models import Q。我已更新了答案。请检查!嗨,我真的很感谢你的帮助我要读这个!嗨,这是本教程。我仍然需要帮助: