Jac*_*rke 5 django datetime date django-models django-queryset
我正在尝试计算用户从 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;
Run Code Online (Sandbox Code Playgroud)
可以使用“额外”,但我已经读过这已被弃用,不应这样做。它的工作原理是这样的:
User.objects.all()
.filter(course='Course 1')
.extra(select={'registered_date': "DATE(registered_at)"})
.values('registered_date')
.annotate(**{'total': Count('registered_at')})
Run Code Online (Sandbox Code Playgroud)
是否可以不使用额外的东西?
我读到可以使用 TruncDate ,我认为这是正确的查询集,但它不起作用:
User.objects.all()
.filter(course='Course 1')
.annotate(registered_date=TruncDate('registered_at'))
.values('registered_date')
.annotate(**{'total': Count('registered_at')})
Run Code Online (Sandbox Code Playgroud)
我明白<QuerySet [{'total': 508346, 'registered_date': None}]>
了,TruncDate 出了点问题。
如果有人比我更了解这一点,并能指出我正确的方向,那将不胜感激。
谢谢你的帮助。
我试图做一些非常相似的事情并且遇到了和你一样的问题。通过order_by
在应用TruncDate
注释后添加一个子句,我设法解决了我的问题。所以我想这也应该对你有用:
User.objects.all()
.filter(course='Course 1')
.annotate(registered_date=TruncDate('registered_at'))
.order_by('registered_date')
.values('registered_date')
.annotate(**{'total': Count('registered_at')})
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助?!