【问题标题】:Django objects filter - AND with ORDjango 对象过滤器 - 与 OR
【发布时间】:2014-05-31 15:41:27
【问题描述】:

我需要过滤模型类的对象。我想查询“日期”字段在某个范围内且其他 2 个字段之一为 True(一个或两个)的所有对象。

以下代码似乎不起作用:

visits = Visit.objects.filter(date__range=(now, delta), Q(sms_reminder=True) | Q(email_reminder=True))

有什么建议吗?

【问题讨论】:

    标签: django django-models django-orm


    【解决方案1】:

    交换过滤器的顺序:

    visits = Visit.objects.filter(
        Q(sms_reminder=True) | Q(email_reminder=True),
        date__range=(now, delta),
    )
    

    来自Qdocs

    但是,如果提供了 Q 对象,则它必须在任何关键字参数的定义之前。

    标准 python:args 然后 kwargs。 (抓了我几次)

    【讨论】:

      【解决方案2】:

      如果您的过滤器是 (A OR B) AND C

      你可以试试这个过滤器:

      visits = Visit.objects.filter( (Q(sms_reminder=True)|Q(email_reminder=True)) & Q(date__range=(now, delta)))
      

      【讨论】:

        猜你喜欢
        • 2014-08-01
        • 2019-12-27
        • 2018-08-05
        • 2014-02-14
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        • 2019-02-08
        相关资源
        最近更新 更多