Django - 从时间戳获取不同的日期

Edw*_*win 8 python django django-models

我试图按日期过滤用户,但直到我可以找到数据库中用户的第一个和最后一个日期.虽然我可以让我的脚本稍后过滤掉重复,但我想从一开始就使用Django来做,distinct因为它显着减少了.我试过了

User.objects.values('install_time').distinct().order_by()
Run Code Online (Sandbox Code Playgroud)

但既然install_time是a timestamp,它包括日期和时间(我并不在乎).因此,它过滤掉的唯一日期是我们可以检索多个用户的安装日期而不是时间的日期.

知道怎么做吗?我使用Django 1.3.1,Postgres 9.0.5和最新版本的psycopg2来运行它.

编辑:我忘了添加以下数据类型install_time:

install_time = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

编辑2:这是Postgres shell的一些示例输出,以及我想要的快速解释:

 2011-09-19 00:00:00
 2011-09-11 00:00:00
 2011-09-11 00:00:00 <--filtered out by distinct() (same date and time)
 2011-10-13 06:38:37.576
 2011-10-13 00:00:00 <--NOT filtered out by distinct() (same date but different time)
Run Code Online (Sandbox Code Playgroud)

我知道Manager.raw,但宁愿用户django.db.connection.cursor直接编写查询,因为Manager.raw返回一个RawQuerySet,IMO,比手动编写SQL查询和迭代更糟糕.

tba*_*ack 7

在对较大数据集进行报告时itertools.group_by可能会太慢.在那些情况下,我让postgres处理分组:

truncate_date = connection.ops.date_trunc_sql('day','timestamp')
qs = qs.extra({'date':truncate_date})
return qs.values('date').annotate(Sum('amount')).order_by('date')
Run Code Online (Sandbox Code Playgroud)