【发布时间】:2022-01-14 12:27:12
【问题描述】:
我正在我的端点中进行一些过滤,并且仅当过滤的查询集包含超过 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?
【问题讨论】:
-
代码看起来很奇怪,如果数字大于30,你想要所有项目,否则你只想要前30?这没有多大意义,因为在
else的情况下,我们已经知道该数字小于 30,因此切片不会有任何区别。 -
cleaned_query[:30] 引用另一个查询集。
-
有一个名为"Django Debug Toolbar"的工具,可以显示执行了多少次和哪些SQL查询。
标签: python django postgresql django-orm