我看到`QuerySet`类有两个不同的方法似乎服务于相同的目的(除非我错了):`.__nonzero__`和`.exists`。(是的,我知道`.__nonzero__`被`bool`使用。)
我的问题是:如果它们都只是检查查询集中是否有任何对象,为什么这两种方法有不同的实现方式?
Django文档关于`QuerySet.__nonzero__`的说法如下:
注意:如果你只想确定是否存在至少一个结果,并且不需要实际的对象,请不要使用此方法。使用exists()更有效(见下文)。
(我没有发现有什么有深度的“下文”。)
为什么`QuerySet.__nonzero__`具有低效的实现? 它是否试图实现与` .exists`不同的功能? Django开发人员为什么不做`__nonzero__ = exists`?
我的问题是:如果它们都只是检查查询集中是否有任何对象,为什么这两种方法有不同的实现方式?
Django文档关于`QuerySet.__nonzero__`的说法如下:
注意:如果你只想确定是否存在至少一个结果,并且不需要实际的对象,请不要使用此方法。使用exists()更有效(见下文)。
(我没有发现有什么有深度的“下文”。)
为什么`QuerySet.__nonzero__`具有低效的实现? 它是否试图实现与` .exists`不同的功能? Django开发人员为什么不做`__nonzero__ = exists`?
__nonzero__
会评估QuerySet
,而exists
则会执行特殊的查询到数据库后端。 - Wessie