Django ORM – objects.filter() vs. objects.all().filter() – which one is preferred?

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().

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)