Problem
When I ask the model manager to get an object, it returns DoesNotExist since no such object exists.
go = Content.objects.get(name="baby")
Instead of DoesNotExist, how can I have go be None instead?
Asked by TIMEX
Solution #1
There isn’t a ‘built-in’ technique to accomplish this. Django will always throw the DoesNotExist exception. In Python, the customary approach to deal with this is to encapsulate it in a try catch:
try:
go = SomeModel.objects.get(foo='bar')
except SomeModel.DoesNotExist:
go = None
I did, however, subclass models. Create a safe get like the code above and use that manager for my models, manager. You can write: SomeModel.objects.safe get(foo=’bar’) in this way.
Answered by Arthur Debert
Solution #2
Since Django 1.6, you can utilize the first() function in the following way:
Content.objects.filter(name="baby").first()
Answered by FeroxTL
Solution #3
From django docs
You can catch the exception and assign None to go.
from django.core.exceptions import ObjectDoesNotExist
try:
go = Content.objects.get(name="baby")
except ObjectDoesNotExist:
go = None
Answered by Amarghosh
Solution #4
This can be done with a generic function.
def get_or_none(classmodel, **kwargs):
try:
return classmodel.objects.get(**kwargs)
except classmodel.DoesNotExist:
return None
Use it as follows:
go = get_or_none(Content,name="baby")
going to be If no entry matches, nothing is returned; otherwise, the Content entry is returned.
Note:It will raises exception MultipleObjectsReturned if more than one entry returned for name=”baby”.
To avoid this type of issue, you should handle it on the data model, although you may want to log it at run time like this:
def get_or_none(classmodel, **kwargs):
try:
return classmodel.objects.get(**kwargs)
except classmodel.MultipleObjectsReturned as e:
print('ERR====>', e)
except classmodel.DoesNotExist:
return None
Answered by Ranju R
Solution #5
This is how you can go about it:
go = Content.objects.filter(name="baby").first()
Now either the object you want or None can be used as the go variable.
Ref: https://docs.djangoproject.com/en/1.8/ref/models/querysets/#django.db.models.query.QuerySet.first
Answered by Gaurav
Post is based on https://stackoverflow.com/questions/3090302/how-do-i-get-the-object-if-it-exists-or-none-if-it-does-not-exist-in-django