РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
482 of 818 menu

Исключение DoesNotExist

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

Синтаксис

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

Где Model - это имя вашей модели, а conditions - условия поиска объекта.

Пример . С моделью 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"

Пример . С пользовательской моделью

Покажем, как обработать ситуацию, когда пользователь не найден по имени:

from django.contrib.auth.models import User try: user = User.objects.get(username='unknown_user') print(user.email) except User.DoesNotExist: print("User with this username does not exist")

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

"User with this username does not exist"

Обработка множественных исключений

Можно перехватывать исключения для разных моделей в одном блоке:

from myapp.models import Article, Category try: article = Article.objects.get(id=999) except Article.DoesNotExist: print("Article not found") except Category.DoesNotExist: print("Category not found")

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

"Article not found"

Использование в методах модели

Исключение часто используется внутри методов модели для обработки отсутствия связанных объектов:

from django.db import models class Article(models.Model): title = models.CharField(max_length=100) category = models.ForeignKey('Category', on_delete=models.CASCADE) def get_category_name(self): try: return self.category.name except Category.DoesNotExist: return "No category"

Результат выполнения метода для статьи без категории:

"No category"

Смотрите также

  • исключение ObjectDoesNotExist,
    которое является родительским для всех DoesNotExist исключений
  • исключение MultipleObjectsReturned,
    которое возникает при наличии нескольких объектов
  • исключение Http404,
    которое используется в представлениях для обработки отсутствия данных
  • метод get,
    который возвращает единственный объект или выбрасывает исключение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить