我正在尝试计算用户从日期时间字段注册的日期。在数据库中,它存储为“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;
可以使用“额外”,但我读到这已被弃用,不应该这样做。但它的工作原理是这样的:
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')})
I get <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')})
希望这可以帮助?!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)