在Django中,假设我要迭代QuerySet并打印其结果,那么计算对象的最佳选项是什么?len(qs)还是qs.count()

(还考虑到在同一次迭代中计算对象不是一个选项.)

推荐答案

尽管Django docs人推荐使用count而不是len:

注意:如果只想确定集合中的记录数,就不要在查询集上使用len().使用SQL的SELECT COUNT(*)在数据库级别处理计数要高效得多,而Django正是出于这个原因提供了count()方法.

因为您无论如何都要迭代此QuerySet,所以使用the result will be cached(除非您使用的是iterator),因此最好使用len,因为this avoids hitting the database again, and also the possibly of retrieving a different number of results!).
如果您使用的是iterator,那么出于同样的原因,我建议您在遍历(而不是使用Count)时包含一个计数变量.

Django相关问答推荐

在 Django 4.1 中提交表单之前显示数据

DecimalField 验证错误,返回不正确的值 Django

更新或创建异步 Django ORM 实例

在Django Rest Framework中按模型属性排序时如何避免重新计算?

在 Django Admin change_list 视图中更改 list_editable 字段时保存 Django 模型

如何根据反向外键相关模型的字段过滤 QuerySet?

Django中的 联合(Union) 和相交(Intersect)

Django 在模型中存储用户图像

Django 表单有 Select 但也有自由文本选项?

我的 django 模板布尔变量在 javascript 中没有按预期工作

如何在 django tests.py 中创建管理员用户

文档中的 Mongoengine creation_time 属性

使用移动应用程序保护通信 [真实性、隐私和完整性]?

Django 自定义管理器 - 如何仅返回登录用户创建的对象?

Django:如何从模板调用视图函数?

Django 模板列表的第一个元素

在 Django Admin 中过滤多对多框

如何仅在某些情况下禁用 Django 的 csrf 保护?

如何在 Django/Python 中减go 两个日期?

django 如何知道已经运行了哪些迁移?