いつもお世話になっております。
早速本題に入らせていただきます。
現在下記サイトなどを参考にして、DjangoとPythonを用いてWebアプリケーションを開発しているのですが、
【Django】ListViewの検索画面にページを分けたリスト表示(ページネーション)の実装をしていく
Django、ページング処理まとめ
絞り込み検索後のデータをListViewに表示する際、
paginate_by に設定した件数を無視して 1ページに全件表示 されてしまいます。
以下が現在のコードになります。
Python
1# views.py 2 3class TestView(PaginationMixin, ListView): 4 model = Test 5 paginate_by = 10 6 context_object_name = 'result' 7 template_name = 'test.html' 8 9 def post(self, request, *args, **kwargs): 10 form_value = { 11 'date_start': self.request.POST.get('date_start', None), 12 } 13 request.session['form_value'] = form_value 14 self.request.GET = self.request.GET.copy() 15 self.request.GET.clear() 16 return self.get(request, *args, **kwargs) 17 18 def get_context_data(self, **kwargs): 19 context = super().get_context_data(**kwargs) 20 21 if 'form_value' in self.request.session: 22 form_value = self.request.session['form_value'] 23 # Formから検索条件を取得 24 date_start = form_value['date_start'] 25 # 絞り込み検索 26 obj = self.model.objects.filter( 27 date_start__gte=datetime.strptime(date_start, '%Y/%m/%d')) 28 # Paginateオブジェクトを取得 29 page_obj = paginate_queryset(self, obj, self.paginate_by) 30 context = { 31 "result": obj, 32 "result_size": len(obj), 33 "page_obj": page_obj, 34 "date_start": date_start, 35 } 36 37 return context 38 39 40def paginate_queryset(self, queryset, page_size): 41 # Paginator 42 paginator = Paginator(queryset, page_size) 43 page = self.request.GET.get('page') 44 page_obj = paginator.page(page) 45 page_obj.pages = 3 46 47 return page_obj
HTML
1<!-- Template:test.html --> 2{% for data in result %} 3 <tr> 4 <td>{{ data.title }}</td> 5 <td>{{ data.date_start|date:"Y/m/d" }}</td> 6 </tr> 7{% endfor %}
現状
絞り込み検索の結果を画面に表示することはできているのですが、
検索結果が1000件あった場合 1ページに1000件全て表示 されてしまいます。
散々調べて色々コードを変えては見ましたがどうしても 1ページに10件だけ表示する 、という一見単純なことができません・・・。
お時間ある方で解決方法等ご存知の方いらっしゃいましたらご助力頂けますと幸いです。
回答1件
あなたの回答
tips
プレビュー