Исключение ObjectDoesNotExist

Исключение ObjectDoesNotExist выбрасывается в Django, когда метод get не находит объект по заданным условиям, или когда происходит обращение к связанному объекту, который не существует. Это исключение является базовым для всех подобных исключений моделей и наследуется от DoesNotExist. Каждая модель получает собственное исключение с таким же названием, что позволяет обрабатывать ошибки точечно.

Синтаксис

pythontry:
  obj = Model.objects.get(**conditions)
except Model.DoesNotExist:
  # Обработка отсутствия объекта

Пример . Для модели Article

Рассмотрим модель статьи и попытку получения несуществующей записи:

pythonfrom myapp.models import Article

try:
  article = Article.objects.get(id=999)
  print(article.title)
except Article.DoesNotExist:
  print("Article not found")

Результат выполнения кода:

python"Article not found"

Пример . Со связанными объектами

Исключение возникает при обращении к несуществующему связанному объекту через отношение OneToOne:

pythonfrom 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")

Результат выполнения кода:

python"Profile does not exist for this user"

Использование с get_object_or_404

Вместо ручной обработки исключения можно использовать вспомогательную функцию для выброса HTTP 404:

pythonfrom 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,
    возникает при ошибках в названиях полей модели