Объединение нескольких фильтров Django

Итак, я борюсь с фильтрацией моих продуктов в Django. В настоящее время у меня есть панель поиска, которая работает, и результат ввода запроса ('whey' в данном случае) выглядит следующим образом:

search bar can be seen at the top right

Я не могу понять, как заставить фильтр сортировки работать сейчас ('Sorteer op:). Потому что при выборе опции вызывается моя функция в представлении, которая выглядит следующим образом:

def zoekopdracht(request):
    if request.GET.get('search') != '':
        try:
            search = request.GET.get('search').lower()
            queryset = models.Product.objects.annotate(search_name=Concat('title', Value(' '), 'categorie', 'brand'
                                                                          , output_field=TextField()))
            products = queryset.filter(search_name__icontains=search)
            product_amount = len(products)
            # sorteer filter
            filtered = SortFilter(
                request.GET,
                queryset=products
            )

            # paginator
            paginator = Paginator(filtered.qs, 12)
            page = request.GET.get('page')
            try:
                response = paginator.page(page)
            except PageNotAnInteger:
                response = paginator.page(1)
            except EmptyPage:
                response = paginator.page(paginator.num_pages)
            product_front_end = {
                'final_products': response,
                'filter': filtered,
                'count': product_amount,
            }
        except AttributeError:
            print(request.GET)
            response = []
            product_front_end = {
                'final_products': response,
            }
    else:
        response = []
        product_front_end = {
            'final_products': response,
        }

    return render(request, 'zoekopdracht.html', product_front_end)

Поскольку GET-запрос из строки поиска теперь пустой, я теряю продукты. Есть ли способ получить текущие продукты обратно в функцию просмотра? Таким образом, я смогу использовать свой фильтр SortFilter для текущих продуктов.

urls.py:

urlpatterns = [
    ...
    path('zoekopdracht', views.zoekopdracht, name='zoekopdracht'),
    ...
]

.html (поиск):

<div class="navbar" id="searchcontainer">
    <form method="get" action="{% url 'zoekopdracht' %}" class="row search-input" id="demo-2" autocomplete="off">
        <div class="col-md-12">
            <input type="search" name="search" placeholder="Zoek.." id="searchinput">
        </div>
    </form>
</div>

.html (фильтр сортировки):

<form method="get" class="form-inline">
    <select class="single-select" name="order_by" id="order_by" onchange="this.form.submit()">
        <option>Sorteer op:</option>
        <option value="-discount_sort">Hoogste korting</option>
        <option value="new_price">Laagste prijs</option>
        <option value="-new_price">Hoogste prijs</option>
    </select>
</form>

filters.py:

class SortFilter(django_filters.FilterSet):
    ORDER_BY_CHOICES = (
        ('-discount_sort', 'Hoogste korting'),
        ('-new_price', 'Hoogste prijs'),
        ('new_price', 'Laagste prijs'),
    )
    order_by = django_filters.ChoiceFilter(label='Sorteer op', choices=ORDER_BY_CHOICES, method='filter_by_order')
    brand = django_filters.MultipleChoiceFilter(widget=forms.CheckboxSelectMultiple)

    class Meta:
        model = Product
        fields = ['brand']

    def filter_by_order(self, queryset, name, value):
        return queryset.order_by(value)
Вернуться на верх