![](/img/trans.png)
[英]How do you assert that Django's QuerySet.count() method was called on a Mock?
[英]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?
如果您查看 django 的有关When Querysets Are Evaluated的文档
你会看到一些关于计数的信息......
注意:如果您只需要确定集合中的记录数(而不需要实际对象),则使用 SQL 的 SELECT COUNT(*) 在数据库级别处理计数会更有效。 Django 正是出于这个原因提供了一个 count() 方法。
所以count()
不会评估集合,而len()
会。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.