首页 > 解决方案 > 我希望我的搜索功能能够获取多个单词,而不仅仅是一个单词,或者在我的数据库中精确匹配句子

问题描述

这是我的搜索栏功能:

`

def searchbar(request):
    if request.method == "GET":
        search = request.GET["search"],
        deity = Deity.objects.filter(Q(name__contains=search[0])|Q(location__contains=search[0])|Q(alt_name__contains=search[0])|Q(culture__contains=search[0])|Q(religion__contains=search[0])|Q(description__contains=search[0])|Q(pop_culture__contains=search[0])),

        context = {
            "user": User.objects.get(id = request.session['user_id']),
            "deity": deity,
            "search": search[0],
        }
        return render(request, 'search_results.html', context)
`

我的导航栏有一个搜索文本框和按钮,它会在整个数据库中搜索我放入搜索栏中的确切内容(大写除外,这似乎无关紧要)。但是,如果我输入一个句子,它会占用整个句子并搜索它,而不会识别搜索中的单个单词。我怎样才能解决这个问题?

标签: pythondjango

解决方案


SQLite不支持区分大小写的LIKE语句。这就是为什么contains行为类似于SQLite的图标。有关详细信息,请参阅数据库说明

以及您没有得到正确结果的原因是因为您使用 . 仅搜索第一个字符search[0]
所以你可以尝试这样的事情:

deity = Deity.objects.filter(Q(name__contains=search)
                         | Q(alt_name__contains=search)
                         | Q(culture__contains=search)
                         | Q(religion__contains=search)
                         | Q(description__contains=search)
                         | Q(pop_culture__contains=search))

如果您使用search[0]而不是,如果您提交表单而不在搜索框中输入任何内容search,您将获得string index out of range 异常。因此,为了安全起见,请始终确保传入的查询不为空。


推荐阅读