如何在Django Orm中按特定小时数范围过滤?

时间:2017-11-07 06:20:44

标签: python django django-queryset

我在下面有一个查询集,它允许我获取最近14天创建的对象:

qs_1 = Model.objects.filter(datetime_created__gte=datetime.now()-timedelta(days=14))

我想要的是创建一个新的查询集,它允许我获取最近14天的对象,并按照从晚上11点到早上9点的范围进行过滤。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

阅读有关hour查找的示例。

  

...取0到23之间的整数。

我认为最易读的解决方案是:

from django.db.models import Q
MyModel.objects.filter(Q(datetime_created__hour__lt=9) |
                       Q(datetime_created__hour__gte=23))

lt查询是因为您可能绝对不希望上午09:00:01或09:59:59而且不需要09:00:00 am。如果分钟很重要,time查找可用于更复杂的情况。 .exclude(...__hour__between=(8, 22))的“过滤器”不是一个明确的解决方案,它可以选择空时间戳,并且可能会产生非常重要的后果,例如左连接等。它需要考虑的时间长于读取两次datetime_created__hour...