Djangoのショートカット関数の中にget_object_or_404とget_list_or_404がある。
この記事では、その関数の使い方をソースコードを交えて記載します。
get_object_or_404の詳細
get_object_or_404とは、Djangoのショートカット関数と呼ばれるものの1つで、モデルに対してget()を呼び出してオブジェクトを1件取得する。
そして、モデルが見つからない場合には、django.http.Http404を送信して画面がPage not found(404)ページに遷移される。
コードは以下のように記載する。
上の例では、MyModelモデルからpk=1のものが返されてmyobject変数に格納し、pk=1のものが仮に存在しないときにはHttp404となります。
もし、pk=1のものが複数存在する場合、pk=1のオブジェクトのうち1つだけ返される。
そのため、get_object_or_404は複数の値をリストで取得することはできず、リスト取得をする場合には後述するget_list_or_404を使うことになる。
また、以下のように記載すると複数のキーから値を取得できるようになる。
(このようにすると複数のカラムで主キーを設定しているテーブルからレコードを取得する際に有用)
ちなみに値が存在しなかった場合は以下のようなHttp404のページが表示される。
get_list_or_404の詳細
get_object_or_404はキーから値を1つ取得するショートカット関数だったが、get_list_or_404はフィルターをかけてリストとしてオブジェクトを取得する関数である。
以下のように記載する。
# myobject[0]とすると一つ目の値にアクセスできる
また、複数のキーを指定して値を絞り込むのもget_object_or_404と同様のやり方で行う。
# myobject[0]とすると一つ目の値にアクセスできる
まとめ
- Djangoには、モデルから値を取得するショートカット関数としてget_object_or_404とget_list_or_404が存在
- get_object_or_404は値を一件取得、存在しない場合は、Http404ページを表示
- get_list_or_404は値をすべて取得、存在しない場合は、Http404ページを表示