Django ListViewでモデルの一覧表示

2019年11月15日

クラスベースビューであるListView(リストのビュー)を利用して、モデルのレコード一覧表示画面を作成してみます。

 

クラスベースビューについては下記のページをご覧下さい。

 

クラスベースで画面を作成 [TemplateView]

 

下記のMemberモデルを利用しています。なおアプリケーションの名前はuserです。

 

user/models.py

 

 

以下のコードによって、登録されたデータベースのレコード一覧を表示させることができます(下記表示例の画像は既に5件のレコードを登録した様子です。)。テンプレート名はmember_list.htmlのように「モデル名_list.html」として命名されていることに注意して下さい。

 

user/views.py

 

user/urls.py

 

user/templates/user/member_list.html

 

表示例

 

 

説明


 

上述したコードを少しずつ編集していく形で説明していきます。

 

user/views.py

7行目でtemplate_nameに利用するテンプレートを指定していますが、デフォルトでは「アプリ名/モデル名_list.html」が設定されているので特に記述する必要はありません。

 

またmember_list.htmlテンプレートの15行目においてobject_listと記述していますが、このobject_listはMemberオブジェクトが含まれている変数のデフォルト名です。もしobject_listという名前ではなく、例えばmember_listのような別の名前にしたい場合は、下記のようにcontext_object_nameを記述します。

テンプレート側で下記のように記述できるようになります。

 

 
 

paginate_byについて

 

paginate_byは、本記事では説明しませんがページネーションを実装する場合に必要となります。仮に下記のように記述すると3件のレコード(オブジェクト)のみ表示されます。

 

queryset(クエリセット)について

 

model = Memberは、querysetに対してMemberのすべてのリストを取得するクエリを指定した下記のコードと同等です。

 

order_by()メソッドの引数にフィールド名を指定して、並びを変えることができます。-(マイナス)をつけると降順になります。

 

filter()メソッドによってフィルタリングできます。ageが23のレコードのみを表示させています。

 

他にも様々なメソッドが存在します。Methods that return new QuerySets をご参照下さい。

 

 

get_queryset()について

 

上述してきたquerysetは、get_queryset()メソッドによって下記のように書き換えれます。

 

queryset = Member.objects.all() と同じ。

 

queryset = Member.objects.order_by(‘-age’) と同じ。

 

 

一覧表示画面から詳細画面への遷移は、同じくジェネリックビュー(汎用ビュー)であるDetailViewを利用すると便利です。

 

DetailViewで詳細画面を作成

 

 

参照ページ


 

django ドキュメント

ビルトインのクラスベースのジェネリックビュー

 

クエリを作成する

 

 

 

LINEで送る
Pocket

Copyright © 2019 思考の葉 All Rights Reserved.  プライバシーポリシー