if User.objects.get(pk=id).exists()
This won’t work, so the question is pretty easy to answer: This way is inferior to the ways which do work π
I guess you actually didn’t make a Minimal Complete Verifiable Example and so missed the error when you posted un-verified code.
So instead, I suppose you are asking about the difference between:
-
QuerySet.exists()
when you have a QuerySet (e.g. from a filter operation).For example:
if User.objects.filter(pk=id).exists():
# ... do the things that need that user to exist
-
Model.objects.get(β¦)
and catching theModel.DoesNotExist
exception type (or, if you want to be more general, the parent typeObjectDoesNotExist
).For example:
try:
user = User.objects.get(pk=id)
except User.DoesNotExist:
# ... handle the case of that user not existing
The difference is:
-
The
QuerySet.exists
method is on a queryset, meaning you ask it about a query (βare there any instances matching this query?β), and you’re not yet attempting to retrieve any specific instance. -
The
DoesNotExist
exception for a model is raised when you actually attempted to retrieve one instance, and it didn’t exist.
Use whichever one correctly expresses your intention.