Есть ли способ аннотировать подсчет для всех объектов без группировки по другому столбцу?

У меня есть код, который выглядит следующим образом:

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, но это вызывает дополнительный код для проверки случая по умолчанию и добавляет запах кода.

Вернуться на верх