exception "myapp.models.DoesNotExist" instead of "MyModel.DoesNotExist"

117 views
Skip to first unread message

gerard

unread,
Oct 6, 2015, 11:57:09 AM10/6/15
to Django users
Hello all,

i use Django 1.8.4 with sqlite.
I added a simple model into "catalogue" app:
class Zoom(models.Model):
name = models.CharField(max_length=200)

def __str__(self):
name = "%s" % self.name
return name

and dit manage.py makemigrations/migrate.
I have a code like this:
for val in ('10', '40'):
try:
obj=Zoom.objects.get(name=val)
except Zoom.DoesNotExist:
obj=Zoom.objects.create(name=val)

but when Zoom table is empty, instead of having Zoom.DoesNotExist
exception, i got this:
Traceback (most recent call last):
File
"/Users/me/python/virtualenv/python3/optimisme/catalogue/management/commands/corrige.py",
line 38, in handle
obj=Zoom.objects.get(name=val)
File
"/Users/me/python/virtualenv/python3/lib/python3.4/site-packages/django/db/models/manager.py",
line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File
"/Users/me/python/virtualenv/python3/lib/python3.4/site-packages/django/db/models/query.py",
line 334, in get
self.model._meta.object_name
catalogue.models.DoesNotExist: Zoom matching query does not exist.

Anybody can help?

Thanks in advance,

--
Gérard Henry

Tim Graham

unread,
Oct 6, 2015, 7:01:32 PM10/6/15
to Django users
I can reproduce an exception appearing as "app.models.DoesNotExist" in a traceback, but "except Model.DoesNotExist" works for me, so I can't explain that.

By the way, you should probably use QuerySet.get_or_create() instead of try/except as it will be more resilient to race conditions.

https://docs.djangoproject.com/en/stable/ref/models/querysets/#django.db.models.query.QuerySet.get_or_create
Reply all
Reply to author
Forward
0 new messages