Reputation: 352
I'm struggling with a DoesNotExist
error on my application. The point is that I don't really understand why this error is thrown as I already handle it:
import socket
from django.core.exceptions import ObjectDoesNotExist
from django.db import Models
class MyClass(models.Model):
name = models.CharField(max_length=250, default=socket.gethostname(), unique=True)
@staticmethod
def update_some_list(some_list):
for some_item in some_list:
try:
MyClass.objects.get(name=some_item)
except ObjectDoesNotExist: # I also tried with MyClass.DoesNotExist
MyClass.objects.create(name=some_item)
The point here is that, when I run into this code, I have some "module-level" DoesNotExist that is thrown away, as if this try/except block is never hit:
Traceback (most recent call last):
File "/app/backend/shared/models.py", line 201, in update_some_list
MyClass.objects.get(name=some_item)
File "/usr/lib/python3.6/site-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/django/db/models/query.py", line 399, in get
self.model._meta.object_name
shared.models.DoesNotExist: MyClass matching query does not exist.
Upvotes: 3
Views: 647
Reputation: 22041
Consider using QuerySet.get_or_create, which shall eliminate the problem above.
MyClass.objects.get_or_create(name=some_item)
Also, please note, that if you access class inside the @staticmethod it makes sense to update it to be @classmethod. Also, in the question you are having:
from django.db import Models
instead of from django.db import models
Upvotes: 1