Checking for empty queryset in Django Checking for empty queryset in Django django django

Checking for empty queryset in Django


if not orgs:    # Do this...else:    # Do that...


Since version 1.2, Django has QuerySet.exists() method which is the most efficient:

if orgs.exists():    # Do this...else:    # Do that...

But if you are going to evaluate QuerySet anyway it's better to use:

if orgs:   ...

For more information read QuerySet.exists() documentation.


If you have a huge number of objects, this can (at times) be much faster:

try:    orgs[0]    # If you get here, it exists...except IndexError:    # Doesn't exist!

On a project I'm working on with a huge database, not orgs is 400+ ms and orgs.count() is 250ms. In my most common use cases (those where there are results), this technique often gets that down to under 20ms. (One case I found, it was 6.)

Could be much longer, of course, depending on how far the database has to look to find a result. Or even faster, if it finds one quickly; YMMV.

EDIT: This will often be slower than orgs.count() if the result isn't found, particularly if the condition you're filtering on is a rare one; as a result, it's particularly useful in view functions where you need to make sure the view exists or throw Http404. (Where, one would hope, people are asking for URLs that exist more often than not.)