@zitSuccess

Как сохранить фильтр при пагинации?

Есть две вьюхи, в первой просто каталог, во второй отфильтрованный каталог.
Все работает, но на отфильтрованном каталоге не работает пагинация, все фильтры сбрасывает. Как это пофиксить?

views.py
class ProductList(ListView):
    """Отображение продуктов"""
    model = Product
    template_name = 'catalog/product_list.html'
    paginate_by = 3

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(*kwargs)
        context['products'] = Product.objects.filter(is_available=True)
        return context


class ProductListFilter(ListView):
    """Отображение отфильтрованных продуктов"""
    model = Product
    template_name = 'catalog/product_list.html'
    paginate_by = 3

    def get_queryset(self):
        return Product.objects.filter(
            Q(type_of_product__slug__in=self.request.GET.getlist('type')) |
            Q(rubric__slug__in=self.request.GET.getlist('rubric'))
        ).distinct()


urls.py
urlpatterns = [
    path('catalog/', views.ProductList.as_view(), name='catalog'),
    path('filter/', views.ProductListFilter.as_view(), name='catalog_filter'),

    path('<str:slug>', views.ProductDetail.as_view(), name='product_detail'),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


html
<div class="pagination-block">
                        <div class="pagination-block-content">
                            {% if page_obj.has_previous %}
                                <a class="btn btn-outline-dark" href="?page=1"> |< </a>
                                <a class="btn btn-outline-dark" href="?page={{ page_obj.previous_page_number }}"> < </a>
                            {% endif %}

                            <span class="current">
                                {{ page_obj.number }} из {{ page_obj.paginator.num_pages }}.
                            </span>

                            {% if page_obj.has_next %}
                                <a class="btn btn-outline-dark" href="?page={{ page_obj.next_page_number }}"> > </a>
                                <a class="btn btn-outline-dark" href="?page={{ page_obj.paginator.num_pages }}"> >| </a>
                            {% endif %}
                        </div>
                    </div>{#PAGINATION#}
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
@bacon
дописать к параметрам паджинации все принятые фильтры, обычно под такое пишут custom filter, реализация простейшая, так же ее можно нагуглить
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы