The method all()
on a manager just delegates to get_queryset()
, as you can see in the Django source code:
def all(self):
return self.get_queryset()
So it's just a way to get the QuerySet from the Manager. This can be handy to ensure that you're dealing with a QuerySet and not a Manager, because MyModel.objects
returns a Manager.
For example, if you want to iterate over all the items, you can't do this:
for item in MyModel.objects:
# do something with item
Because you can't iterate over a Manager. However, all()
returns the QuerySet, you can iterate over a QuerySet:
for item in MyModel.objects.all():
# do something with item
Generally, you should never overwrite all()
. You can overwrite get_queryset()
but this method must return a QuerySet.
If you would use a filter method like filter()
or exclude()
, you would already have the QuerySet, because these methods are proxied to the QuerySet. So you don't have to do something like all().filter()
.