姜戈 |获取每月文章数

Django | Get count of articles per month

我有两个模型 ArticleAuthor 是这样实现的:

class Author(models.Model):
    name = models.CharField(max_length=50)

class Article(models.Model):
    name = models.CharField(max_length=50)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    pub_date = models.DateField()

在我的模板上,我想绘制一个图表(在前端使用 chart.js)显示过去 12 个月作者每月的出版物。为此,我需要每个月发表的文章数。

这是获取作者文章的查询:

articles = Article.objects.filter(author=author)
获得每月计数的最佳做法是什么?

我考虑过将十二个月中的每个月分别注释到 QuerySet,但还没有找到适合我的方法。
或者,我考虑过在用户浏览器的 JS 站点上处理这个问题。

任何suggestions/recommendations?

如果您需要在 Django 中对数据进行分组,则需要使用 ORM aggregation features

要在约会时使用它,您可以利用他们的 ORM helper functions

from django.db.models.functions import TruncMonth
from django.db.models import Count

Article.objects
    .filter(author=author)                 # Filter by the author   
    .annotate(month=TruncMonth('created')) # Truncate by month and add 'month' to values
    .values('month')                       # Group By month
    .annotate(count_id=Count('id'))        # Count the number of articles in the grouping
    .order_by('-month')[:12]               # Sort by months in descending order (latest to earliest) and get the 12 first results