以前、リストビューの使用方法についての記事を投稿したが、今回はそのリストビューで表示する要素の順番を入れ替えたり(sortしたり)、絞込を行う簡単な方法について記述していく。
get_querysetをカスタマイズしてリストビューのオブジェクトを操作する
ListViewを継承して新たにリストビューのクラスを作成した際、get_queryset()メソッドをオーバライドすることで、ListViewで取得するオブジェクトを絞り込んだり、順序を変えたりすることができる。
例えば以下のように利用する。
- views.py
from django.views.generic import ListView
from blog.models import Post
from django.utils import timezone
class PostListView(ListView):
model = Post
from blog.models import Post
from django.utils import timezone
class PostListView(ListView):
model = Post
def get_queryset(self):
return Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')
上のようにすると、get_querysetでPostモデルが、published_date <= timezone.now()で絞り込まれ、order by published_date descでソートされる。
また、以下のように定義すると
- views.py
def get_queryset(self):
return Post.objects.filter(published_date__isnull=True).order_by('created_date')
return Post.objects.filter(published_date__isnull=True).order_by('created_date')
published_date is Null, order by created_dateとしてリストを取得するようになる。
ListViewはDjangoでも特によく利用するビューのなので是非利用しましょう