Аннотация Всего созданных, измененных и удаленных за каждый год
С учетом модели Item как мне найти общее количество элементов, созданных, измененных и удаленных за каждый год? И можно ли это сделать одним запросом к базе данных?
from django.db import models
class Item(models.Model):
created_at = models.DateTimeField(null=True, blank=True)
modified_at = models.DateTimeField(null=True, blank=True)
deleted_at = models.DateTimeField(null=True, blank=True)
Мой текущий запрос возвращает одинаковые значения для total_created, total_modified и total_deleted.
from django.db.models.functions import TruncYear
Item.objects.annotate(
created_at_year=TruncYear("created_at"),
modified_at_year=TruncYear("modified_at"),
deleted_at_year=TruncYear("deleted_at"),
).values("created_at_year", "modified_at_year", "deleted_at_year").annotate(
total_created=models.Count("id"),
total_modified=models.Count("id"),
total_deleted=models.Count("id"),
)
Пример данных | id | created_at | modified_at | deleted_at | |----|---------------------|---------------------|---------------------| | 1 | 2020-01-01 01:01:01 | 2020-01-01 01:01:01 | 2021-01-01 01:01:01 | | 2 | 2020-01-01 01:01:01 | 2021-01-01 01:01:01 | 2021-01-01 01:01:01 | | 3 | 2020-01-01 01:01:01 | 2021-01-01 01:01:01 | 2022-01-01 01:01:01 |
Желаемый выход
{
"2020": {"total_created": 3, "total_modified": 1, "total_deleted": 0},
"2021": {"total_created": 0, "total_modified": 2, "total_deleted": 2},
"2022": {"total_created": 0, "total_modified": 0, "total_deleted": 1},
}
Я знаю, что можно добавить параметр filter к Count, но я не знаю, могу ли я использовать это здесь.