【问题标题】: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)))