Как можно опустить пустые параметры django-фильтра в url?
Я использую django-filters для фильтрации моего набора запросов, мне интересно, возможно ли, чтобы библиотека опускала пустые поля при генерации отфильтрованного URl. Мой URl будет выглядеть следующим образом:
/?price=&producer=&price__gte=4&price__lte=&producer__name=&category__name=&o=-price
И я хочу добиться более чистого варианта, используя только непустые фильтры:
/?price__gte=4&o=-price
filters.py
class ProductFilter(django_filters.FilterSet):
# price = django_filters.NumberFilter()
price__gte = django_filters.NumberFilter(field_name="price", lookup_expr="gte")
price__lte = django_filters.NumberFilter(field_name="price", lookup_expr="lte")
vendor__name = django_filters.CharFilter(lookup_expr="icontains")
category__name = django_filters.CharFilter(lookup_expr="icontains")
o = django_filters.OrderingFilter(
# tuple-mapping retains order
fields=(("price", "price"),),
# labels do not need to retain order
)
class Meta:
model = Product
fields = ["price", "category", "vendor"]
views.py
class ProductListView(LoginRequiredMixin, ListView):
model = Product
ordering = ["-created_at"]
def get_ordering(self):
ordering = self.request.GET.get("ordering", "-created_at")
return ordering
def get_queryset(self, **kwargs):
qs = Product.objects.exclude(status="HID").all()
return qs
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
f = ProductFilter(self.request.GET, queryset=self.get_queryset())
context["filter"] = f
return context