Ответ
Для подсчета количества записей в QuerySet используется метод .count().
Он выполняет в базе данных оптимизированный SQL-запрос SELECT COUNT(*) и возвращает целочисленное значение, не загружая сами объекты в память.
Пример:
from myapp.models import Product
# Количество всех продуктов
all_products_count = Product.objects.count()
# Количество активных продуктов
active_products_count = Product.objects.filter(is_active=True).count()
count() vs len() — в чем разница?
queryset.count(): Эффективный способ. Выполняет один SQL-запросCOUNT(*)на стороне БД. Идеально для получения только количества.len(queryset): Неэффективный способ. Сначала загружает все объекты из БД в память Python, а затем вычисляет их количество. Это может привести к большому потреблению памяти и медленной работе при большом объеме данных.
Используйте len(queryset) только в том случае, если вы все равно собираетесь итерировать этот QuerySet и вам нужны сами объекты.
Ответ 18+ 🔞
Давай разберемся, как узнать, сколько у тебя там этих... записей в QuerySet, чтобы не выстрелить себе в ногу.
Есть у него такой метод — .count(). Он не тупой, он умный. Не будет тащить всю эту гору данных из базы к тебе в память, а просто спросит у базы: «Э, слушай, а сколько там у нас всего?». База ему в ответ: «Да вот, на, цифра». И всё. Один запрос SELECT COUNT(*), и ты счастлив.
Смотри, как это выглядит:
from myapp.models import Product
# Сколько всего продуктов, хоть гнилых, хоть свежих
all_products_count = Product.objects.count()
# А вот сколько из них не просроченных
active_products_count = Product.objects.filter(is_active=True).count()
А теперь главное, блядь, не перепутай! count() и len() — это две большие разницы, как говорят в Одессе.
-
queryset.count(): Это как позвонить на склад и спросить: «Мужик, сколько у теща коробок?». Тебе назвали цифру, и ты отвалил. Эффективно, быстро, мозг не ебёт. Используй всегда, когда тебе нужно ТОЛЬКО количество. -
len(queryset): А это уже полный пиздец. Это как пригнать на склад десять грузовиков, загрузить ВСЕ эти коробки, привезти их к себе во двор, разгрузить, пересчитать поштучно, а потом думать, куда эту хуйню девать. Загружает ВСЕ объекты в память. Делай так, только если ты реально планируешь потом каждую коробку вскрывать и смотреть, что внутри. А если нет — то нахуй не надо, сервер захлебнётся.
Короче, запомни: хочешь просто цифру — count(). Хочешь всё пощупать — тогда уже len(), но будь готов к последствиям, ёпта.