Django фильтрация по нескольким страницам

Я все еще новичок в Django и веб-разработке, извините, если вопрос глупый. В настоящее время у меня есть строка поиска и выпадающий список для категории, который затем отправляет набор запросов в шаблон результатов. Шаблон результатов также имеет фильтры для дальнейшего уточнения поиска, например, ценовой диапазон, состояние и для сортировки. Мне интересно, как лучше всего реализовать эти фильтры без потери набора запросов с предыдущей страницы

views.py

class ProductListView(ListView):
    model = Product
    template_name = "products/index.html"
    context_object_name = 'products'
    paginate_by = 10


class ProductSearch(ListView):
    model = Product
    template_name = "products/ad-list-view.html"
    context_object_name = "products"

    def get_context_data(self, **kwargs):
        context = super(ProductSearch, self).get_context_data(**kwargs)
        

        Product_list = super().get_queryset()

        context.update({
       
            'filter': ProductFilter(
                self.request.GET, queryset=Product_list)
        })

        return context

    def get_queryset(self):

        search_query = ''

        if self.request.GET.get('search_query') or self.request.GET.get('category'):
            search_query = self.request.GET.get('search_query')
            option = self.request.GET.get('category')

            category = Category.objects.filter(Name__icontains=option)

            ducts = Product.objects.distinct().filter(
                Q(Product_name__icontains=search_query),
                category__in=category,)

            return ducts

        return search_query

index.py

                        <div class="container">
                            <div class="row justify-content-center">
                                <div class="col-lg-12 col-md-12 align-content-center">
                                        <form method="GET" action="{% url 'Product-search' %}">
                                            <div class="form-row">
                                                <div class="form-group col-md-4">
                                                    <input type="text" class="form-control my-2 my-lg-1" id="inputtext4" placeholder="What are you looking for" 
                                                    name="search_query"  value="{{search_query}}">
                                                </div>
                                                <div class="form-group col-md-3">
                                                    <select name="category" value= "{{category}}" class="w-100 form-control mt-lg-1 mt-md-2">
                                                        <option value= null>Category</option>
                                                        {% for category in Category_list  %}
                                                        <option >{{category.Name}}</option>
                                                        {% endfor %}

                                                    </select>
                                                </div>
                                                <div class="form-group col-md-3">
                                                    <input type="text" class="form-control my-2 my-lg-1" id="inputLocation4" placeholder="Location">
                                                </div>
                                                <div class="form-group col-md-2 align-self-center">
                                                    <button type="submit" class="btn btn-primary">Search Now</button>
                                                </div>
                                            </div>
                                        </form>
                                    </div>
                                </div>
                    </div>

ad-list-view

filters.py



class ProductFilter(django_filters.FilterSet):
    

    class Meta:
        model = Product
        fields = {
            'Product_name': ['icontains', ],

        }

    
``
Вернуться на верх