Django | Получение количества статей за месяц
У меня есть две модели Article и Author, реализованные следующим образом:
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 на стороне frontend), показывающий публикации авторов в месяц, за последние 12 месяцев. Для этого мне нужно количество статей, опубликованных в каждом месяце.
Вот запрос для получения статей авторов:
articles = Article.objects.filter(author=author)
Как лучше всего получить подсчет за месяц?
Я думал о том, чтобы аннотировать каждый из двенадцати месяцев отдельно в QuerySet, но не нашел способа, который бы мне подошел.
В качестве альтернативы я думал о том, как решить эту проблему на JS-сайте в браузере пользователя.
Есть предложения/рекомендации?
Если вам нужно группировать данные в Django, вам придется использовать возможности агрегации ORM.
А чтобы использовать это в датах, вы можете использовать их вспомогательные функции ORM.
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