Обеспечение корректного ответа при отсутствии записи модели

Используйте get_object_or_404 с нужным фильтром и доступным пользователю queryset. При отсутствии записи Django вернёт HTTP 404.

Короткий ответ

Что ответить на собеседовании

Используйте get_object_or_404 с нужным фильтром и доступным пользователю queryset. При отсутствии записи Django вернёт HTTP 404.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо внедрить проверку: если запрашиваемый объект модели не найден (например, запись с указанным slug отсутствует), следует корректно завершить запрос, например вернуть страницу с ошибкой 404.

# views.py
# TODO: добавить обработку случая, когда объект модели не найден (например, через get_object_or_404)

Ответ

Используйте get_object_or_404 с нужным фильтром и доступным пользователю queryset. При отсутствии записи Django вернёт HTTP 404.

from django.shortcuts import get_object_or_404, render
from .models import Article

def article_detail(request, slug):
    article = get_object_or_404(Article, slug=slug)
    return render(request, 'article.html', {'article': article})

Пример предполагает, что модель имеет уникальный slug. Для закрытого или ещё не опубликованного контента передавайте предварительно ограниченный queryset, а не все записи: существование объекта не означает право на его просмотр.

Не перехватывайте все исключения как 404. Ошибка соединения с БД или некорректный запрос должны оставаться серверной ошибкой, иначе диагностика станет невозможной. При неуникальном фильтре отдельно решите проблему нескольких совпадений.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее