我创建了一个用于搜索功能的视图,但它不起作用。它不是过滤产品

问题描述 投票:0回答:1

我为我的网站创建了搜索功能 在 views.py 中:

def search_view(request):
    query=request.GET.get("q")

    if query:
        products=Product.objects.filter(title__icontains=query,description__icontains=query).order_by("-date")
    else:
        products = Product.objects.none()

    context={
        "products":products,
        "query":query
    }
    return render(request, 'core/search.html',context)

我在我的网站中创建了一个用于搜索产品的模板 并在 search.html


    <form action="{%  url 'core:search'  %}" method="GET" class="search-form">
      <input type="text" name="q" placeholder="Enter your product name..." class="search-input">
      <button type="submit" class="search-button">Search</button>
    </form>

但是搜索功能不起作用。我的意思是它没有从我的数据库中找到产品

请告诉我这里出了什么问题?

python html django django-models django-views
1个回答
0
投票

您在此处编写的查询会检查标题和描述中是否存在两者的文本。如果您想匹配至少具有两者之一的项目,您可以使用:

from django.db.models import Q


def search_view(request):
    query = request.GET.get('q')

    if query:
        products = Product.objects.filter(
            Q(title__icontains=query) | Q(description__icontains=query)
        ).order_by('-date')
    else:
        products = Product.objects.none()

    context = {'products': products, 'query': query}
    return render(request, 'core/search.html', context)

话虽这么说,子字符串匹配并不是一个好的搜索方式:一个小拼写错误、不同的单词顺序、同义词等都会失败。

通常搜索时最好使用搜索技术,例如 SolrElasticsearchWhoosh [GitHub]Xapian

PostgreSQL 上,您还可以使用

__search
查找[Django-doc] 和其他搜索向量技术,尽管这仍然不是很有效。

© www.soinside.com 2019 - 2024. All rights reserved.