get_object_or_404
Функция get_object_or_404 применяется к менеджеру модели
и возвращает один объект, соответствующий переданным
условиям. Если объект не найден, функция автоматически
генерирует исключение Http404. Это удобно
для обработки ситуаций, когда запрашиваемый объект
не существует, и позволяет избежать явной проверки
на наличие объекта и ручного вызова исключения.
Функция принимает менеджер модели и условия фильтрации
в виде ключевых аргументов.
Синтаксис
get_object_or_404(klass, **kwargs)
Параметры функции:
klass - класс модели или менеджер, из которого
нужно получить объект. В качестве первого аргумента
можно передать модель, например, Article,
или менеджер, например, Article.objects.
**kwargs - условия фильтрации в виде ключевых
аргументов, где ключ - это имя поля с оператором поиска,
а значение - условие отбора. Например,
pk=1, slug='article-slug' или
status='published'.
Пример
Давайте получим статью по её идентификатору:
from myapp.models import Article
from django.shortcuts import get_object_or_404
article = get_object_or_404(Article, pk=1)
print(article.title)
Результат выполнения кода:
"How to use get_object_or_404"
Если статья с идентификатором 1 существует, код выведет её заголовок. Если такой статьи нет, Django вернёт страницу с ошибкой 404.
Пример
Давайте получим статью по её слагу:
from myapp.models import Article
from django.shortcuts import get_object_or_404
article = get_object_or_404(Article, slug='django-get-object-or-404')
print(article.title)
Результат выполнения кода:
"Django get_object_or_404 function"
Пример
Давайте получим опубликованную статью по её идентификатору:
from myapp.models import Article
from django.shortcuts import get_object_or_404
article = get_object_or_404(Article, pk=1, status='published')
print(article.title)
Результат выполнения кода:
"Published article title"
В этом случае функция проверит, что статья с идентификатором 1 имеет статус 'published'. Если условия не выполняются, будет возвращена ошибка 404.
Пример . С передачей менеджера
Вместо модели можно передать менеджер:
from myapp.models import Article
from django.shortcuts import get_object_or_404
article = get_object_or_404(Article.objects, pk=5)
print(article.title)
Результат выполнения кода:
"Article with pk=5"
Пример . Использование во view
Рассмотрим типичное использование функции в контроллере:
from django.shortcuts import get_object_or_404, render
from myapp.models import Article
def article_detail(request, pk):
article = get_object_or_404(Article, pk=pk)
return render(request, 'article_detail.html', {'article': article})
Если статья не найдена, Django автоматически вернёт шаблон 404.html или стандартную страницу ошибки.
Смотрите также
-
функция
get_list_or_404,
которая возвращает список объектов или ошибку 404 -
функция
render,
которая отображает шаблон с контекстом данных -
класс
DetailView,
который автоматически получает объект для детального просмотра -
метод
get,
который получает один объект или вызывает исключение