使用 queryset.count() 缓存查询集吗?

Do using queryset.count() caches the queryset?

我正在我的端点中进行一些过滤,只有当过滤的查询集超过 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?

如果你查看有关 When Querysets Are Evaluated

的 django 文档

您会看到一些关于计数的信息...

Note: If you only need to determine the number of records in the set (and don’t need the actual objects), it’s much more efficient to handle a count at the database level using SQL’s SELECT COUNT(*). Django provides a count() method for precisely this reason.

所以 count() 不计算集合,而 len() 计算集合。