Кэширует ли использование queryset.count() набор запросов?

Я делаю некоторую фильтрацию в моей конечной точке, и один из фильтров применяется только в том случае, если отфильтрованный набор запросов содержит более 30 элементов.

yesterday_date = timezone.now() - timezone.timedelta(days=1)
if query_dict.get("active"):
    active_query = cleaned_query.filter(created_at__gt=yesterday_date)
    if active_query.count() > 30:
        cleaned_query = active_query
    else:
        cleaned_query = cleaned_query[:30]

Я сомневаюсь, будет ли метод .count() уже оценивать и кэшировать набор запросов или мне следует использовать len(queryset), чтобы избежать повторного попадания в базу данных в случае, если он больше 30?

Если вы проверите документацию django о When Querysets Are Evaluated

Вы увидите некоторую информацию о подсчете...

Примечание: Если вам нужно определить только количество записей в наборе (и вам не нужны фактические объекты), гораздо эффективнее будет обрабатывать подсчет на уровне базы данных, используя SQL SELECT COUNT(*). Django предоставляет метод count() именно по этой причине.

Так что count() не оценивает множество, тогда как len() оценивает.

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