Всякий раз, когда я нажимаю на ссылку на следующую страницу (которая является запросом получения), фильтр обходится, и я получаю соответствующую страницу для всего списка (без фильтра). Например, если я нахожусь на странице 1 для отфильтрованного списка и нажимаю «Далее», я попадаю на страницу 2 для всего нефильтрованного списка. В models.py,
class Person(models.Model):
name = models.CharField(max_length=50, unique=True)
gender = models.CharField(max_length=7, choices=GENDER_CHOICES)
category = models.CharField(max_length=20, choices=get_all_category_choices())
В filters.py,
import django_filters
from .models import Person
class PersonFilter(django_filters.FilterSet):
class Meta:
model = Person
fields = [
'name',
'gender',
'category',
]
В views.py,
def show_all_persons_page(request):
context = {}
filtered_person_list = PersonFilter(
request.GET,
queryset=Person.objects.all()
)
context['filtered_person_list'] = filtered_person_list
paginated_filtered_person_list = Paginator(filtered_person_list.qs, 3)
page_number = request.GET.get('page')
person_page_obj = paginated_filtered_person_list.get_page(page_number)
context['person_page_obj'] = person_page_obj
return render(request, 'app1/show_all_persons_page.html', context)
В app1 / show_all_persons_page. html
<form method="get">
{{ filtered_person_list.form.as_p }}
<button type="submit">Search</button>
</form>
{% for person in person_page_obj %}
<img src="{{ person.picture.url }}" width="240">
<h2>
{{person.name}}
<br>
{{person.gender}}
<br>
{{person.category}}
<br>
</h2>
<br>
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if person_page_obj.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ person_page_obj.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ person_page_obj.number }} of {{ person_page_obj.paginator.num_pages }}.
</span>
{% if person_page_obj.has_next %}
<a href="?page={{ person_page_obj.next_page_number }}">next</a>
<a href="?page={{ person_page_obj.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>