Django 多查询字符串参数
我创建了这个简单的搜索功能:Django 多查询字符串参数,django,django-views,django-2.1,Django,Django Views,Django 2.1,我创建了这个简单的搜索功能: 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__
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)
它向我展示了正确的结果。但是当我使用多个参数时,我有语法错误:无效语法
我确信该查询对应于:
从“标题”为“关键字搜索”或“标语”为的帖子中选择*
“关键字搜索”或“内容”是“关键字搜索”
如何解析?以上是不正确的Python语法,不能在命名参数之间放置运算符 但是,Django必须表示“条件”,因此您可以将条件包装在
Q
对象中,并使用|
运算符表示逻辑or,如:
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%"