Django

DjangoのListViewで順番を入れ替えたり絞込をする(get_querysetのカスタマイズ)

前回リストビューの使用方法についての記事を書きましたが、今回そのリストビューで表示する要素の順番を入れ替えたり(sortしたり)、絞込を行う簡単な方法について記述していきます。

get_querysetをカスタマイズしてリストビューのオブジェクトを操作する

自分でListViewを継承して新たにリストビューのクラスを作成したさいに、継承元のListViewのget_queryset()メソッドをオーバライドすることでListViewで取得するオブジェクトを絞り込んだり、順序を変えたりすることができます。

例えば以下のように利用します。

  • views.py

上のように定義すると、get_querysetでPostモデルが、published_date <= timezone.now()で絞り込まれ、order by published_date descでソートされます。

また、以下のように定義すると

  • views.py

published_date is Null, order by created_dateとしてリストを取得するようになります。

ListViewはDjangoでも特によく利用するビューのなので是非覚えておくとよいかと思います。