我正在使用具有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)施加了约束。源必须是Model,Manager或QuerySet,所以据我所知,使用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/

10-12 00:02
查看更多