明确限制 Django QuerySet
Posted
技术标签:
【中文标题】明确限制 Django QuerySet【英文标题】:clear limit on Django QuerySet 【发布时间】:2018-07-12 01:35:51 【问题描述】:可以通过执行以下操作来限制 QuerySet 上的结果:
qs = MyModel.objects.all()[:3]
由于 QuerySet 通常被延迟评估,是否可以在迭代之前从 qs
中删除此限制?
我希望有像qs = qs[:]
或qs = qs[0:]
这样的直截了当的东西,但都没有。到目前为止,我唯一可以开始工作的是qs.query.clear_limits()
,但我不确定这是否是公共 API 的一部分(我不得不翻阅 Django 源代码才能找到它)。
【问题讨论】:
clear_limits()
的好发现。我不知道有一个公共 API 可以做到这一点。也许应该有一个 - 其他一些查询集方法有“重置”的方法,例如.order_by()
和 select_related(None)
.
当然,clear_limits
是公共 API 的一部分,我已经使用过它可能多次,并且可以很好地满足我的需求
【参考方案1】:
就像 Alasdair 所说,似乎没有记录在案的公共 API 来清除限制。可能是因为这不是一件很常见的事情。
无论如何,由于它没有在任何地方记录,我认为它是“内部的”,如有更改,恕不另行通知。
【讨论】:
以上是关于明确限制 Django QuerySet的主要内容,如果未能解决你的问题,请参考以下文章
Django 在 INSTALLED APPS 中没有明确的应用标签
我可以更改表单小部件类而不在 Django 中明确重新定义它吗?
什么是 django 通道 InMemoryChannelLayer 限制
模型类 django.contrib.sessions.models.Session 没有声明明确的 app_label 并且不在 INSTALLED_APPS 中的应用程序中