Исключение 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,
который возвращает единственный объект или выбрасывает исключение