Django

Djangoのget_object_or_404,get_list_or_404を使って値を取得する

Djangoのショートカット関数の中にget_object_or_404とget_list_or_404があります。

この記事では、その関数の使い方をソースコードを交えて記載します。

get_object_or_404の詳細

get_object_or_404とは、Djangoのショートカット関数と呼ばれるものの一つで、モデルに対してget()を呼び出してオブジェクトを1件取得します。

そして、モデルが見つからない場合には、django.http.Http404を送信して画面がPage not found(404)ページに遷移されます。

コードは以下のように記載します。

myobject = get_object_or_404(MyModel, pk=1)

#pk=1のものを1件取得

上のように記載するとMyModelというモデルからpk=1のものが返されてmyobject変数に格納され、pk=1のものが仮に存在しないときにはHttp404となります。

もし仮にpk=1のものが複数存在する場合、pk=1のオブジェクトのうち一つだけ返されることとなります。

そのため、get_object_or_404は複数の値をリストで取得したい場合には、不向きで、その場合には後述するget_list_or_404を使うことになります。

 

また、以下のように記載すると複数のキーから値を取得できるようになります。

(このようにすると複数のカラムで主キーを設定しているテーブルからレコードを取得する際に有用です)

myobject = get_object_or_404(MyModel, pk=1, name=’aaaa’)

# pk=1, name=’aaaa’のものを1件取得

ちなみに値が存在しなかった場合は以下のようなHttp404のページが表示されます。

get_list_or_404の詳細

get_object_or_404はキーから値を1つ取得するショートカット関数だったのに対して、get_list_or_404はモデルから指定した値でフィルターをかけてリストとしてオブジェクトを取得する関数です。

以下のように記載します。

myobject = get_list_or_404(MyModel, pk=1)

# pk=1ものを全て取得, classはList
# myobject[0]とすると一つ目の値にアクセスできる

た、複数のキーを指定して値を絞り込むのもget_object_or_404と同様のやり方です。

myobject = get_list_or_404(MyModel, pk=1, name=’aaa’)

# pk=1, name=’aaa’ものを全て取得, classはList
# myobject[0]とすると一つ目の値にアクセスできる

[box02 title=”まとめ”]

  • Djangoには、モデルから値を取得するショートカット関数としてget_object_or_404とget_list_or_404が存在
  • get_object_or_404は値を一件取得、存在しない場合は、Http404ページを表示
  • get_list_or_404は値をすべて取得、存在しない場合は、Http404ページを表示

[/box02]