all()
经理的方法只是委托给get_queryset()
,如Django源代码所示:
def all(self):
return self.get_queryset()
因此,这只是从Manager中获取QuerySet的一种方法。确保返回的是Manager,这对于确保您正在处理QuerySet而不是Manager是非常方便的MyModel.objects
。
例如,如果要遍历所有项目, 执行以下操作:
for item in MyModel.objects:
# do something with item
因为您无法遍历Manager。但是,all()
返回QuerySet后,您 遍历QuerySet:
for item in MyModel.objects.all():
# do something with item
通常,您绝不应该覆盖all()
。您可以覆盖,get_queryset()
但是此方法 返回QuerySet。
如果您将使用类似filter()
或的过滤器方法exclude()
,则您将已经拥有QuerySet,因为这些方法被代理到QuerySet。所以您不必做类似的事情all().filter()
。