【问题标题】:Multi searching DJANGO多搜索DJANGO
【发布时间】:2019-09-29 08:48:43
【问题描述】:

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

观看次数:

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>

【问题讨论】:

    标签: python django search


    【解决方案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

    【讨论】:

    • 然后我得到错误:UnboundLocalError at /search/ local variable 'query' referenced before assignment
    • 嗨,不幸的是,我得到了 Q 未定义的名称错误。
    • 在顶部添加:from django.db.models import Q。我已经更新了答案。请检查!
    • 您好,非常感谢您的帮助。 :) 我要读这个!
    【解决方案2】:

    您可以像这样过滤多个名称:

    City.objects.filter(name__in=list_of_names)

    其中list_of_nameslist 类型的对象,例如list_of_names = ['name_1', 'name_2']

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多