Django对象过滤器 - 与OR一起使用

时间:2014-04-16 16:24:52

标签: django django-models django-orm

我需要过滤模型类的对象。我想查询所有' date'字段在某个范围内,其他2个字段中的一个为True(一个或两个)。

以下代码似乎不起作用:

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

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

交换过滤器的顺序:

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

来自Q docs

  

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

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

答案 1 :(得分:0)

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

您可以尝试使用此过滤器:

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