田舎社会人のいろいろ学習記

Python、英語、その他いろいろ

【django】ListViewの使い方【Python】

f:id:vigilantPotato:20210810151507p:plain
データベース内のオブジェクトをリスト化して表示するための汎用クラスである、ListViewクラスの使用方法を整理する。


【スポンサーリンク】


基本的な使用例

例として、モデルItem内のオブジェクトを、ListViewクラスを用いてリスト表示する簡単な使用例を示す。

views.py

#ListViewのインポート
from django.views.generic.list import ListView  
#modelのインポート
from .models import Item

#ListView
class TestListView(ListView):
    template_name = 'test.html' #template
    model = Item                #model

test.html (template)

{% for instance in object_list %}
<p>
    {{ instance.title }}
</p>
{% endfor %}

view.py内でListViewクラスを継承したクラスを作成し、template_nameとmodelを指定するだけでリスト化したオブジェクトをテンプレートファイルに渡される。 テンプレート側には、object_list内にリスト化されたオブジェクトが渡されるため、for文を用いて表示させることができる。

[↑ 目次へ]


ユーザー名を指定してリスト表示

モデル内の全てのオブジェクトではなく、特定の条件を満たしたオブジェクトのみを表示させることができる。 例として、Itemオブジェクト内のusernameを参照し、ログインしているユーザー名と一致している場合のみリスト表示させる例を示す。

class TestListView(ListView):
    template_name = 'test.html' #template
    model = Item                #model
    
    def get_queryset(self):
        return self.model.objects.filter(
            username=self.request.user,
        )

ListViewクラスのget_querysetメソッドを上書きすることで、モデルから抽出するオブジェクトにフィルターをかけることができる。上記の例では、Itemモデル内のusernameが、requestを出したユーザー名と一致するオブジェクトのみ抽出するように上書きしている。

[↑ 目次へ]


【スポンサーリンク】