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

EmptyResultSet

Исключение EmptyResultSet используется в Django ORM для обозначения ситуаций, когда запрос заведомо не может вернуть результат. Это исключение наследуется от django.core.exceptions.EmptyResultSet и возникает внутри механизма построения запросов при обнаружении невозможности получения данных. В отличие от DoesNotExist, которое бросается при попытке получить конкретный объект, EmptyResultSet сигнализирует о том, что условие фильтрации изначально не может быть выполнено, и запрос даже не отправляется в базу данных.

Синтаксис

Исключение не вызывается напрямую в пользовательском коде, а генерируется внутри Django при выполнении следующих операций:

# Исключение может быть перехвачено: try: queryset = Model.objects.filter(condition=False) # При определенных условиях может быть выброшено EmptyResultSet except EmptyResultSet: # Обработка ситуации пустого результата pass

Пример

Рассмотрим ситуацию, когда условие фильтрации заведомо не может быть выполнено, например, при использовании несуществующего значения в поле с выбором:

from django.core.exceptions import EmptyResultSet from myapp.models import Article try: # Статьи с несуществующим статусом articles = Article.objects.filter(status='archived') # Если статус 'archived' отсутствует в choices, # может быть сгенерировано EmptyResultSet print(articles.exists()) except EmptyResultSet: print("Запрос не может вернуть результаты")

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

"Запрос не может вернуть результаты"

Пример

Исключение часто возникает при использовании методов exclude с противоречивыми условиями. Например, если мы исключаем все возможные значения поля:

from django.core.exceptions import EmptyResultSet from myapp.models import Category try: # Исключаем все категории, что делает запрос пустым categories = Category.objects.exclude( id__in=Category.objects.values_list('id', flat=True) ) # Django может сгенерировать EmptyResultSet print(categories.count()) except EmptyResultSet: print("Нет категорий для исключения")

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

"Нет категорий для исключения"

Пример

При использовании метода values или values_list на заведомо пустом QuerySet, исключение может быть выброшено до выполнения запроса:

from django.core.exceptions import EmptyResultSet from myapp.models import User try: # Пользователи с несуществующим значением поля users = User.objects.filter( age__gt=200 ).values('username') # Если возраст > 200 невозможен, будет EmptyResultSet for user in users: print(user) except EmptyResultSet: print("Нет пользователей с таким возрастом")

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

"Нет пользователей с таким возрастом"

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

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