Estoy filtrando un poco en mi punto final, y uno de los filtros solo se aplica si el conjunto de consultas filtrado tiene más de 30 elementos.
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]Mi duda es, ¿el método .count() ya evaluará y almacenará en caché el conjunto de consultas o debo usar len(conjunto de consultas) para evitar otro acceso a la base de datos en caso de que sea mayor a 30?
Si consulta los documentos de django sobre cuándo se evalúan los conjuntos de consultas
Verá información sobre cómo contar...
Nota: si solo necesita determinar la cantidad de registros en el conjunto (y no necesita los objetos reales), es mucho más eficiente manejar un conteo en el nivel de la base de datos usando SELECT COUNT(*) de SQL. Django proporciona un método count() precisamente por esta razón.
Así que count() no evalúa el conjunto, mientras que len() sí lo hace.