3

我有一个 Django 应用程序,其中有一个返回今天登录用户计数的视图。相应的声明如下:

login_count= User.objects.filter(last_login__startswith=timezone.now().date()).count()

我想获取上周和上个月登录一次的用户数。就像,这里timezone.now()返回今天的日期,有没有什么可以涵盖一周或一个月的范围?

4

1 回答 1

4

是的,有,甚至命名为range.

例子

import datetime
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
User.objects.filter(last_login__range=(start_date, end_date))

上周的

today = datetime.date.today()
last_week = today - datetime.timedelta(days=7)
User.objects.filter(last_login__range=(last_week, today))

然而,

使用日期过滤 DateTimeField 将不包括最后一天的项目,因为边界被解释为“给定日期的凌晨 0 点”。如果 pub_date 是 DateTimeField,则上面的表达式将被转换为以下 SQL:

一个快速的解决方案是简单地添加一天,因此范围包括今天date的最后一分钟,但不会更多(也包括更新)。last_week

today = datetime.date.today() + datetime.timedelta(days=1)
last_week = datetime.date.today() - datetime.timedelta(days=7)
User.objects.filter(last_login__range=(last_week, today))
于 2016-06-21T14:53:37.083 回答