Есть ли способ аннотировать подсчет для всех объектов без группировки по другому столбцу?
У меня есть код, который выглядит следующим образом:
filtered_queryset = Object.objects.filter(...misc filters)
match time:
case "year":
qs = filtered_queryset.annotate(year=TruncYear("created_at")).values("year")
case "month":
qs = filtered_queryset.annotate(month=TruncMonth("created_at")).values("month")
case "week":
qs = filtered_queryset.annotate(week=TruncWeek("created_at")).values("week")
case _:
qs = filtered_queryset
final_count = qs.annotate(count=Count("id"))
В каждом случае я ожидаю данные, которые выглядят следующим образом
# Each case
{
[{
"TIME": ...
"count": ...
},
...
]
}
# Default
{
[{
"count": ...
}]
}
<<<У меня сложилось впечатление, что является Count()
терминальным выражением в django и что кверисет будет оценен. Однако в случае по умолчанию вместо оценки возвращается queryset. Что я упускаю, из-за чего не оценивается queryset?
Я знаю, что могу просто вызвать filtered_queryset.count()
вместо того, чтобы пытаться сделать это через annotate, но это вызывает дополнительный код для проверки случая по умолчанию и добавляет запах кода.