【问题标题】:Multiple querystring parameters多个查询字符串参数
【发布时间】:2018-11-11 16:03:12
【问题描述】:

我创建了这个简单的搜索功能:

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: invalid syntax

我确定查询对应于:

SELECT * FROM Post WHERE “title” is “key_search” or “tagline” is “key_search”或“contents”是“key_search”

我该如何解决?

【问题讨论】:

    标签: django django-views django-2.1


    【解决方案1】:

    以上是不正确的 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%"

    【讨论】:

      猜你喜欢
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多