首页 > 技术文章 > django按日期分类

yyyzyyyz 2021-10-17 02:48 原文

按日期分类

在ORM中我们保存的日期一般是DateTime等形式,即“年-月-日”,我们有的时候需要按照月进行分组,使用原始的数据比较麻烦。

Django提供了Trunc方法为我们解决这一难题。它可以为我们截断日期格式的数据,按日截断、月截断等等。

Trunc类提供了很多子类便于我们使用,比如TruncYearTruncMonth等等。

这个函数的返回值仍然是日期类型。

举一个例子,假设我们需要统计出每个月写了几篇文章,就可以按月分组,配合聚合查询Count以及分组查询annotate

time_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth("create_time")).values("month").annotate(cout_num=Count("pk")).values("month","cout_num")
# TruncMonth("create_time") 意思就是将create_time字段按月截取,并返回
# 如此一来,这个日期返回值就便于我们配合annotate对月份进行分组

有关Trunc的详细用法,见官方文档:https://docs.djangoproject.com/en/3.2/ref/models/database-functions/#trunc

推荐阅读