django - 切片时查询集被评估?

标签 django django-queryset

在 django queryset doc( https://docs.djangoproject.com/en/1.10/ref/models/querysets/ ) 中,它说“在内部,一个 QuerySet 可以被构造、过滤、切片,并且通常在没有实际命中数据库。在您执行某些操作来评估查询集之前,实际上不会发生任何数据库事件。”然后,它说“您可以通过以下方式评估 QuerySet:迭代/切片/...” .

所以,我的问题是“在切片时是否对 Queryset 求值”。

最佳答案

完整的段落解释了切片何时会评估查询集,何时不会(强调我的):

  • Slicing. As explained in Limiting QuerySets, a QuerySet can be sliced, using Python’s array-slicing syntax. Slicing an unevaluated QuerySet usually returns another unevaluated QuerySet, but Django will execute the database query if you use the “step” parameter of slice syntax, and will return a list. Slicing a QuerySet that has been evaluated also returns a list.

Django 只会在您使用 step 参数时评估查询集,例如 queryset[::2],因为这不能转换为 SQL 查询。在其他情况下,切片未评估的查询集将返回另一个未评估的查询集,Django 将向查询添加 LIMIT 和/或 OFFSET

关于django - 切片时查询集被评估?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40689886/

相关文章:

python - 测试期间Django双重导入

python - 在 Django 中通过 View 上下文将数据传递给 javascript

python - Django:标签中的For循环显示不同的信息

python - 对 django 中列表列表的元素进行排名和计数

python - 将 <optgroup> 与 form.fields.queryset 一起使用?

Django - 使用多个外键关系的模型优化数据库查询时显示结果信息

Django 1.8 条件注释导致 INNER JOIN 而不是 LEFT OUTER JOIN

python - 为什么 Django get_or_create 会导致这个 IntegrityError?

python - 无法上传类型错误为 : expected str, 字节或 os.PathLike 对象的文件,而不是列表

django - 在 Django 中使用 through 查询多对多关系