【Django】views.py:get_object_or_404、get_list_or_404の使用方法
2021.06.18 /
本記事ではDjangoのviews.pyで使用する、get_object_or_404とget_list_or_404の使用方法について解説していきます。
これらはモデル(データベース)から指定した対象のレコード(オブジェクト)を取得するために使われます。
記述を短くするためにDjangoで用意されているdjango. shortcutsに含まれているget_object_of_404とget_list_or_404の使い方を見ていきましょう。
get_object_or_404
get_object_or_404は、django.shortcutsに用意されているショートカット関数です。
これはモデルから指定した対象のレコードを1件取得することができます。
get_object_or_404を使うためには、プログラムの先頭で次のようにdjango.shortcutsからインポートする必要があります。
from django.shortcuts import get_object_or_404
get_object_or_404の使用例を以下に記します。
from django.shortcuts import get_object_or_404, render
def book(request, book_id):
book = get_object_or_404(Book, pk=book_id)
return render(request, 'book/book-detail.html', {'book': book})
ここではBookモデルからpk=book_idのレコードを取得し、book変数に格納しています。
book_idはテンプレートから送信されたデータです。
このようにget_object_or_404の第1引数にはモデル、第2引数以降はアクセスしたい(検索したい)レコードの情報(キー)を指定します。
複数条件でレコードの絞り込み(検索)も可能です。
book = get_object_or_404(Book, pk=book_id, name=’office’)
またget_object_or_404を使って存在しないレコードにアクセスした場合、404エラーを返します。
クライアント側には、次図のようにPage not found(404)ページが表示されます。
そのため上記で記載したget_object_or_404の使用例は以下のように記述することができます。
from django.http import Http404
def book(request, book_id):
try:
book = Book.objects.get(pk=book_id)
except Book.DoesNotExist:
raise Http404("404 Error")
return render(request, 'book/book-detail.html', {'book': book})
本来は上記のように記載すべきところを、短く記述できるようにしたのがショートカット関数のget_object_or_404です。
django.shortcutsのショートカットは、短い記述で多くの機能を含んでいます。
get_object_or_404の機能をまとめると次のようになります。
- モデルから指定した対象のレコードを1件取得する
- アクセスしたレコードが存在しなかった場合、404エラーを返す
get_list_or_404
同じカラム値を持つレコードが複数ある場合、get_list_or_404()を使用します。
get_object_or_404では1件しかオブジェクトを取得できないので、複数のオブジェクト(レコード)を取得する場合は、get_list_or_404を使います。
取得した複数のレコードはリストで保存されます。
get_list_or_404の使用例を以下に記します。
from django.shortcuts import get_list_or_404
def book(request, category):
books = get_list_or_404(Book, category=category)
return render(request, 'book/book-detail.html', {'books': books})
使い方はget_object_or_404と同じです。
get_object_or_404の機能をまとめると次のようになります。
- モデルから指定したキーのレコードをすべてリストとして取得する
- アクセスしたレコードが存在しなかった場合、404エラーを返す
404エラーとは
すでに解説しているように、get_object_or_404とget_list_or_404は、アクセスしたレコードが存在しなかった場合に404エラーを返します。
ではこの404エラーとは何なのか。
404エラーとはユーザーにリンク先(アクセス先)が存在しないことを知らせるためのエラーページです。
404はHTTPステータスコードと呼ばれます。
HTTPステータスコードによって、エラーの内容がわかるようになっています。
まとめ
本記事「【Django】views.py:get_object_of_404、get_list_or_404の使用方法」はいかがでしたか。
djangoを勉強し始めの方でもget_object_or_404やget_list_or_404を見たことがある、使ったことがあるという人は多いと思います。
それほどよく使う関数です。しかし詳しくその意味を知っている人は少ないです。
本記事を通して、これら関数の使い方を理解して、今後のWebアプリケーション開発に活かしてください。