@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#}
  • Вопрос задан
  • 213 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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