我已经创建了这个简单的搜索功能:
def search(request):
if "q" in request.GET:
querystring = request.GET.get("q")
print(querystring)
if len(querystring) == 0:
return redirect("/search/")
posts = Blog.objects.filter(title__icontains=querystring | tagline__icontains=querystring | contents__icontains=querystring)
context= {"posts": posts}
return render(request, "kernel/search.html", context)
else:
return render(request, "kernel/search.html")
例如,当我仅使用一种条件时:
posts = Blog.objects.filter(title__icontains=querystring)
它告诉我正确的结果。但是,当我使用多个参数时,会出现 SyntaxError:无效的语法。
我确定查询对应于:
SELECT * FROM从哪里“标题”为“ key_search”或“标语”为 “ key_search”或“ contents”是“ key_search”
我该如何解决?
答案 0 :(得分:2)
以上是错误的Python语法,您不能在命名参数之间放置运算符。
但是Django具有Q
objects [Django-doc]来表达“条件”,因此您可以将条件包装在Q
对象中,并使用|
运算符来表达逻辑或类似的内容:>
from django.db.models import Q
posts = Blog.objects.filter(
Q(title__icontains=querystring) |
Q(tagline__icontains=querystring) |
Q(contents__icontains=querystring)
)
这将导致查询看起来或多或少像:
SELECT *
FROM Post
WHERE "title" LIKE "%key_search%"
OR "tagline" LIKE "%key_search%"
OR "contents" LIKE "%key_search%"