明确限制 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 错误邮件

什么是 django 通道 InMemoryChannelLayer 限制

Django 文件上传大小限制

模型类 django.contrib.sessions.models.Session 没有声明明确的 app_label 并且不在 INSTALLED_APPS 中的应用程序中