django - 使用日期时间字段按天对 Django 模型条目进行分组

标签 django django-models django-aggregation

我正在使用类似文章的模型,该模型具有 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/

相关文章:

html - Django SelectDateWidget 内联选择( Bootstrap ?)

python - Django UpdateView 没有表单来更新对象

python - 如何编写在其内部连接中使用复杂的 "on"子句的 Django 查询?

django - 从 Django 的 ArrayAgg 中排除空值

Django 条件注解

javascript - Django 中不安全的用户输入文本有哪些危险?

python - Django manytomany 关系超过 2 个应用程序

python - 执行 full_clean 的 Model.objects.create 等价物?

具有unique_together的Django多态模型

python - 如何在不使用原始 SQL 的情况下按foreignkey对象的数量过滤对象?