在 Django 中按日期计算记录数
我有一个类似于以下内容的模型:
class Review(models.Model):
venue = models.ForeignKey(Venue, db_index=True)
review = models.TextField()
datetime_created = models.DateTimeField(default=datetime.now)
我想查询数据库以获取按天分组的场所的评论总数。 MySQL 查询将是:
SELECT DATE(datetime_created), count(id)
FROM REVIEW
WHERE venue_id = 2
GROUP BY DATE(datetime_created);
在 Django 中完成此操作的最佳方法是什么?我可以只使用
Review.objects.filter(venue__pk=2)
和解析视图中的结果,但这对我来说似乎不对。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这应该可以工作(使用与您使用的相同的 MySQL 特定函数):
This should work (using the same MySQL specific function you used):
现在
Extra()
正在被贬值,更合适的答案将使用 Trunc 例如这个接受的答案< /a>现在OP的问题将回答如下
Now that
Extra()
is being depreciated a more appropriate answer would use Trunc such as this accepted answerNow the OP's question would be answered as follows
为了完整起见,由于 extra() 旨在弃用,因此可以使用这种方法:
它在 django 1.8 中对我有用,无论是在 sqlite 还是 MySql 数据库中。
Just for completeness, since extra() is aimed for deprecation, one could use this approach:
It worked for me in django 1.8, both in sqlite and MySql databases.
如果您要存储日期字段,您可以使用这个:
因为您要存储日期时间,所以它有点复杂,但这应该提供一个很好的起点。在此处查看聚合文档。
If you were storing a date field, you could use this:
Because you're storing datetime, it's a little more complicated, but this should offer a good starting point. Check out the aggregation docs here.
您还可以定义自定义函数:
只需确保您的数据库引擎支持 DATE 函数
Also you can define custom function:
Just make sure that your DB engine supports DATE function