[英]Regex to match the line that ends with the exact word rather than similar words
[英]I want my search function to be able to take multiple words rather than just one word, or exact sentence match in my database
这是我的搜索栏 function:
`
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语句。 这就是为什么包含类似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
异常。 因此,为了安全起见,请始终确保传入的查询不为空。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.