我正在使用类似文章的模型,该模型具有 DateTimeField(auto_now_add=True) 来捕获发布日期 (pub_date)。这看起来像下面这样:
class Article(models.Model):
text = models.TextField()
pub_date = models.DateTimeField(auto_now_add=True)
我想做一个查询,计算每天添加了多少文章帖子或条目。换句话说,我想查询条目并按天(最终是月、小时、秒等)对它们进行分组。这在 SQLite shell 中看起来类似于以下内容:
select pub_date, count(id) from "myapp_article"
where id = 1
group by strftime("%d", pub_date)
;
返回如下内容:
2012-03-07 18:08:57.456761|5
2012-03-08 18:08:57.456761|9
2012-03-09 18:08:57.456761|1
我似乎无法弄清楚如何从 Django QuerySet 中获得该结果。我知道如何获得 a similar result using itertools.groupby ,但在这种情况下这是不可能的(解释如下)。
此查询的最终结果将用于显示每天帖子数的图表。我正在尝试使用 Django Chartit 包来实现这一目标。 Chartit 对数据源 (DataPool) 施加了限制。源必须是模型、管理器或查询集,因此据我所知,使用 itertools.groupby 不是一个选项。
所以问题是... 我如何按天分组或聚合条目并最终得到一个 QuerySet 对象?
最佳答案
创建一个仅存储日期数据(而非时间)的额外字段并使用 Count 进行注释:
Article.objects.extra({'published':"date(pub_date)"}).values('published').annotate(count=Count('id'))
结果将是:
published,count
2012-03-07,5
2012-03-08,9
2012-03-09,1
关于django - 使用日期时间字段按天对 Django 模型条目进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9637986/