Исключение ObjectDoesNotExist
Исключение ObjectDoesNotExist выбрасывается в Django,
когда метод get не находит объект по заданным условиям,
или когда происходит обращение к связанному объекту,
который не существует. Это исключение является базовым
для всех подобных исключений моделей и наследуется
от DoesNotExist. Каждая модель получает
собственное исключение с таким же названием,
что позволяет обрабатывать ошибки точечно.
Синтаксис
try:
obj = Model.objects.get(**conditions)
except Model.DoesNotExist:
# Обработка отсутствия объекта
Пример . Для модели Article
Рассмотрим модель статьи и попытку получения несуществующей записи:
from myapp.models import Article
try:
article = Article.objects.get(id=999)
print(article.title)
except Article.DoesNotExist:
print("Article not found")
Результат выполнения кода:
"Article not found"
Пример . Со связанными объектами
Исключение возникает при обращении к несуществующему связанному объекту через отношение OneToOne:
from myapp.models import User, Profile
user = User.objects.get(id=1)
try:
profile = user.profile
print(profile.bio)
except Profile.DoesNotExist:
print("Profile does not exist for this user")
Результат выполнения кода:
"Profile does not exist for this user"
Использование с get_object_or_404
Вместо ручной обработки исключения можно использовать вспомогательную функцию для выброса HTTP 404:
from django.shortcuts import get_object_or_404
from myapp.models import Article
article = get_object_or_404(Article, id=999)
# Если статья не найдена, будет вызвано исключение Http404
Смотрите также
-
исключение
DoesNotExist,
является базовым классом для ObjectDoesNotExist -
исключение
MultipleObjectsReturned,
возникает при попытке получить несколько объектов через get() -
исключение
Http404,
стандартное исключение для несуществующих страниц -
исключение
FieldError,
возникает при ошибках в названиях полей модели