やりたいこと
Yahoo!知恵袋のように、select option でソート順を変更したい。
具体的には、
python
1<!--list.html --> 2<form action="" method="GET"> 3 <select name="sort_order" id="sort_order" onchange=submit(this.form)> 4 <option value="date_desc">質問日時の新しい順</option> 5 <option value="date_asc">質問日時の古い順</option> 6 <option value="ans_desc">回答数の多い順</option> 7 <option value="ans_asc">回答数の少ない順</option> 8 <option value="likes_desc">いいねの多い順</option> 9 </select> 10</form>
python
1# views.py 2class SampleListView(ListView): 3 template_name = 'list.html' 4 model = Sample 5 context_object_name = 'samples' 6 paginate_by = 1 7 8 def get_queryset(self): 9 sort_order = self.request.GET.get('sort_order') 10 if sort_order == 'date_desc': 11 return Sample.objects.order_by('-created_at') 12 elif sort_order == 'date_asc': 13 return Sample.objects.order_by('created_at')
のようなコードがあった場合、
- ソート条件を選択(質問日時の古い順を選んだとする)
- クエリ文字列(sort_order=date_asc)付きのURLを作成
- django側でクエリ文字列を受け取り、並び替えをする
- 選択したソート条件をselectedにする
問題点
1 ~ 3はできるが、4ができない。つまり、
ソートすることはできるが、ソートした後、一番上に書いたoptionにselectedがついてしまう。
今回の場合、
質問日時の古い順を選んでソートした後、select部分に質問日時の新しい順と表示されるが、質問日時の古い順と表示させたい。
ご教授お願いします。
あなたの回答
tips
プレビュー