разбиение на страницы в виде, который позволяет фильтровать - PullRequest
1 голос
/ 22 марта 2020

в представлении, которое позволяет вам фильтровать по элементам, таким как поиски и особенно фильтры по категориям или сериям, возможно ли сделать разбиение на страницы? если да, вы можете дать мне представление, которое использует его

1 Ответ

0 голосов
/ 22 марта 2020

Да . A ListView [Django -doc] может сделать это, поскольку разбиение на страницы выполняется по результату get_queryset. Следовательно, вы можете реализовать это следующим образом:

from django.views.generic.list import ListView
from app.models import MyModel

class MyModelListView(ListView):
    model = MyModel
    <b>paginate_by = 10</b>
    template_name = 'some_template.html'

    def <b>get_queryset</b>(self, **kwargs):
        qs = super().get_context_data(**kwargs)
        return qs.filter(<b>some_field__icontains=self.request.GET.get('search', '')</b>)

Если вы выполняете и разбивку на страницы, и поиск, то в строке запроса есть два элемента, поэтому URL-адреса разбивки на страницы являются более громоздкими:

{% for object in object_list %}
    {{ object }}
{% endfor %}
{% if page_obj.has_previous %}
    <a href="<b>?search={{ request.GET.search|urlencode }}&</b>page={{ page_obj.previous_page_number }}">previous</a>
{% endif %}
{% if page_obj.has_next %}
    <a href="<b>?search={{ request.GET.search|urlencode }}&</b>page={{ page_obj.previous_page_number }}">Next</a>
{% endif %}
...