【发布时间】:2017-08-30 08:20:42
【问题描述】:
我正在尝试计算用户从 DateTime 字段注册的日期。在数据库中,它存储为“2016-10-31 20:49:38”,但我只对日期“2016-10-31”感兴趣。
原始 SQL 查询是:
select DATE(registered_at) registered_date,count(registered_at) from User
where course='Course 1' group by registered_date;
可以使用'extra',但我已经读过它已被弃用,不应该这样做。它的工作原理是这样的:
User.objects.all()
.filter(course='Course 1')
.extra(select={'registered_date': "DATE(registered_at)"})
.values('registered_date')
.annotate(**{'total': Count('registered_at')})
是否可以不使用额外的?
我读到可以使用 TruncDate,我认为这是正确的查询集,但它不起作用:
User.objects.all()
.filter(course='Course 1')
.annotate(registered_date=TruncDate('registered_at'))
.values('registered_date')
.annotate(**{'total': Count('registered_at')})
我收到 <QuerySet [{'total': 508346, 'registered_date': None}]>,所以 TruncDate 出了点问题。
如果有人比我更了解这一点,并能指出我正确的方向,那将不胜感激。
感谢您的帮助。
【问题讨论】:
-
我只会使用额外的,这正是它的用途。它还没有被弃用,不要认为它会很快被弃用,而不是首先给我们一些替代解决方案,因为目前它是此类问题的唯一选择。所以我不会担心它。
标签: django date datetime django-models django-queryset