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%"