Записи в группе Django по месяцам
Я просто пытаюсь сгруппировать записи в Data.active_objects, которые встречаются в одном и том же месяце и году. Я бы хотел, чтобы записи, разделяющие один и тот же месяц и год, были аннотированы количеством вхождений в Data.active_objects
Data.active_objects имеет несколько записей с одинаковыми значениями месяца в 'ts_create'
То, что я пробовал до сих пор, это
test = Data.active_objects.annotate(ts_create__count=Count(TruncMonth('ts_create), distinct=True)
Однако это не дает ожидаемых результатов, поскольку каждая запись в Data.active_objects имеет аннотированное значение 'ts_create__count' равное 1, даже если записи происходят в одном и том же месяце
Попробуйте это:
from django.db.models.functions import ExtractMonth, ExtractYear
test = Data.active_objects.annotate(year=ExtractYear('ts_create'),
month = ExtractMonth('ts_create')).values('year','month').annotate(total=Count('id'))
Вы можете использовать TruncMonth [Django-doc] для усечения ts_create до начала месяца, а затем аннотировать количество элементов с:
from django.db.models import Count
from django.db.models.functions import TruncMonth
Data.objects.values(
month=TruncMonth('ts_create')
).annotate(
count=Count('pk')
).order_by('month')
В результате будет получен QuerySet словарь с month и count в качестве ключей, например:
<QuerySet [
{'month': date(2022, 1, 1), 'count': 14},
{'month': date(2022, 2, 1), 'count': 25},
{'month': date(2022, 3, 1), 'count': 13},
{'month': date(2022, 4, 1), 'count': 2}
]>