リストビュー ページに検索バーを追加しようとしています。最初にすべての投稿アイテムを取得し、クエリを検索ボックスに入れて送信すると、フィルタリングされたクエリセットが返されます。うまく表示されますが、ページネーションにのみ問題があります。フィルタリングされていないクエリセットの場合、次のページは問題なく次の 2 つの投稿を取得しますが、フィルタリングされたクエリセットの場合、クエリセットが正しく反映されていることがわかりますが、次のページはフィルタリングされていない 2 ページ目を取得しますフィルタリングされたクエリセットではありません。ここで私が間違っていることについて、誰かが私にいくつかの指針を与えることができますか? ありがとう
私のテンプレートは次のようになります。
{% block content %}
.....
<form action="" method="get">
<input type="text" name='q'>
<input type="submit" value="Search">
</form>
{% for post in object_list %}
....
{% endfor %}
{% if is_paginated %}
<div class="pagination">
<span class="page-links">
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}"><<</a>
{% endif %}
<span class="page-current">
Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}
</span>
{% if page_obj.has_next %}
<a href="?page={{ page_obj.next_page_number }}">>></a>
{% endif %}
</span>
</div>
{% endif %}
以下のようなリストビューがあります。
class Postlist(ListView):
model=post
paginate_by = 2
query_string = ''
def get_queryset(self):
if ('q' in self.request.GET) and self.request.GET['q'].strip():
query_string = self.request.GET['q']
entry_query = get_query(query_string, ['title', 'body',]) ## call get_query() function
queryset = post.objects.filter(entry_query).order_by('-created')
else:
queryset=post.objects.all().order_by('-created')
return queryset
def get_context_data(self):
context = super(ListView, self).get_context_data(**kwargs)
context['q'] = query_string
## do sth here to pre-populate the input text box
return context