【问题标题】:Search functionality in DjangoDjango 中的搜索功能
【发布时间】:2020-05-24 14:56:07
【问题描述】:

我正在开发搜索功能。我正在尝试使用 django 3.0 从数据库中查询多个字段。每当我运行代码时,我都会收到“未找到以下结果:“”。我的代码可能有什么问题?

这是我的代码:

views.py

def search(query=None):
queryset = []
queries = query.split(" ")
for q in queries:
    posts = AdPost.objects.filter(
        Q(category__icontains=q),
        Q(sub_category__icontains=q),
        Q(detail__icontains=q),
    ).distinct()

    for post in posts:
        queryset.append(post)

    return list(set(queryset))


  def home(request):
context = {}

query = " "
if request.GET:
    query = request.GET['q']
    context['query'] = str(query)

ad_posts = sorted(search(query), key=attrgetter('date_updated'), reverse=True)
context['ad_posts'] = ad_posts

user = request.user

if not user.is_authenticated:
    return redirect('login')
form = PostForm(request.POST or None, request.FILES or None)
if form.is_valid():
    obj = form.save(commit=False)
    obj.author = user
    obj.save()
    form = PostForm()

context['post_form'] = form

return render(request, 'posts/home.html', context)

home.html

 <div class="content">
      {% if ad_posts %}
          {% for post in ad_posts %}
             <div>
                {% include 'snippets/post_link.html' with ad_post=post %}
              </div>
           {% endfor %}
           {% else %}
              <div>
                 {% include 'snippets/post_link.html' with query=post %}
              </div>
           {% endif %}
  </div>

sn-ps/post_link.html

{% if ad_posts %}
    <div class="card">
        <p><b>{{post.author.name}}</b> {{post.date_published}}</p>
        <p>{{post.detail}}</p>
    </div>
{% else %}
   <div class="card">
      <h4>No results found for: "{{query}}"</h4>
   </div>
{% endif %}

搜索表单位于 base.html

<form class="">
  <input type="search" name="q" id="id_q" value="{{query}}">
  <button type="submit">Submit</button>
</form>

【问题讨论】:

    标签: html django django-views django-templates


    【解决方案1】:

    多个查询你必须使用管道符号而不是逗号

    posts = AdPost.objects.filter(
            Q(category__icontains=q)|
            Q(sub_category__icontains=q)|
            Q(detail__icontains=q)
        ).distinct()
    

    【讨论】:

      猜你喜欢
      • 2019-04-21
      • 2016-10-07
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      • 2019-11-20
      相关资源
      最近更新 更多