Here u can see my views with filter
class ProductFilter(django_filters.FilterSet):
min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
max_price = django_filters.NumberFilter(name="price", lookup_type='lte')
class Meta:
model = Ad
fields = ['min_price', 'max_price']
class FindByTag(generics.ListAPIView):
queryset = Ad.objects.all()
serializer_class = AdDetailSerializer
filter_class = ProductFilter
Look down below for my urls for this view class
urlpatterns = [
path('api/v1/tag/select?', FindByTag.as_view())
]
And finally my serializer
class AdDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Ad
fields = '__all__'
So, the main problem is that i send a GET request to
http://localhost:8000/api/v1/tag/select?max_price=10000
and receive all records from my postgres db, filter doesn't work, can someone explain me why? Fell free to answer.
Integration with Django Rest Framework is provided through a DRF-specific
FilterSet
and a filter backend. These may be found in the rest_framework sub-package
You need to specify the filter_backend
provided by django-filters
if you would like to directly use the filterset
for filtering
from django_filters import rest_framework as filters
class FindByTag(generics.ListAPIView):
queryset = Ad.objects.all()
serializer_class = AdDetailSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = ProductFilter
class ProductFilter(django_filters.FilterSet):
min_price = django_filters.NumberFilter(field_name="price", lookup_expr='gte')
max_price = django_filters.NumberFilter(field_name="price", lookup_expr='lte')