Search code examples
pythondjangodjango-rest-frameworkdjango-filter

filter price range by django-filter


I added a price range filter by Django-filter but seems it doesn't work.

filters.py

from django_filters import FilterSet
from .models import Apartment

class ApartmentFilter(FilterSet):
    class Meta:
        model = Apartment
        fields = {
            'price': ['lt','gt']
        }

views.py

class ApartmentViewSet(viewsets.ModelViewSet):
    queryset = Apartment.objects.all().order_by('-timestamp')
    serializer_class = ApartmentSerializer
    permission_classes = [
        permissions.IsAuthenticatedOrReadOnly, IsOwnerApartmentOrReadOnly]

    filter_backends = [filters.SearchFilter,
                       DjangoFilterBackend, filters.OrderingFilter]
    filter_class = ApartmentFilter
    search_fields = ['address']
    filterset_fields = ['category', 'district']
    ordering_fields = ('price',)

Solution

  • You can use built-in RangeFilter:

    from django_filters import FilterSet, RangeFilter
    
    
    class ApartmentFilter(FilterSet):
        price = RangeFilter()
    
        class Meta:
            model = Apartment
            fields = ['price']
    

    Then, in your request parameters send it as price_min and price_max.

    E.g. <your_api_endpoint>/?price_min=100&price_max=200