python - 我希望我的搜索功能能够获取多个单词,而不仅仅是一个单词,或者在我的数据库中精确匹配句子
问题描述
这是我的搜索栏功能:
`
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)
`
我的导航栏有一个搜索文本框和按钮,它会在整个数据库中搜索我放入搜索栏中的确切内容(大写除外,这似乎无关紧要)。但是,如果我输入一个句子,它会占用整个句子并搜索它,而不会识别搜索中的单个单词。我怎样才能解决这个问题?
解决方案
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
异常。因此,为了安全起见,请始终确保传入的查询不为空。
推荐阅读
- sql-server - AWS DMS - 从 SQL Server 迁移到 S3 存储桶。如何在 .csv 中添加标题?
- java - 为什么没有添加外键约束 groovy/grails
- cakephp-4.x - 选择表条目并将其用于 CAKEPHP 4 应用程序中的所有后续查询
- r - 如何更改主面板中每个 tabPanel 的 sidebarPanel
- c# - How to temporarily store summary data with C# .net core
- python - 如何处理错误没有足够的值在for循环中解压
- go - 更改特定属性时显示 Pre-ApplyWarning
- javascript - 在 JS 中使用 window.location.origin 设置 if 语句
- javascript - 制作 onClick 功能,无需打开新窗口即可将您发送到链接
- ios - 如何启用 iOS 文件应用程序以将文件复制到我的应用程序中?