0

I am working on project using django rest framework in which i have to filter different parameters given by user.I am using django Filter backend. Here is my code:

class FilterViewSet(viewsets.ModelViewSet):

serializer_class = SearchSerializer

#Filters on specific fields
filter_backends = (DjangoFilterBackend,)

filter_fields = ('property_zipcode','property_state', 
                 'property_county',
                 'property_city','property_area',)#range between 100 to 500 or area less then 500.

#range is pass by user as a property_area=300.

def filter_queryset(self, queryset):
    if self.request.query_params.get('property_state', None):
        queryset = super(FilterViewSet, self).filter_queryset(self.get_queryset())
        return queryset
    else:
        queryset = self.get_queryset()
        return queryset

Everything is working fine. But now i have to filter property_area based on range like 100 sqft to 500 sqft. How i can achieve this using djangoFilter backend?

Salman Ahmed
  • 682
  • 1
  • 10
  • 24
  • https://docs.djangoproject.com/en/1.11/ref/models/querysets/#range – geckos Dec 01 '17 at 11:58
  • I read all django queryset documentation here i just want to know how to pass it in django rest framework with filter Backend. – Salman Ahmed Dec 01 '17 at 12:01
  • Did you read django-filter documentation also? http://django-filter.readthedocs.io/en/master/ref/filters.html#numericrangefilter – Gabriel Muj Dec 01 '17 at 13:25

1 Answers1

0

Thanks @Gabriel Muj. From the django-filter documentation i solved my problem. I created my own filter class added fields which is use for filters.

class Filter(django_filters.FilterSet):

    class Meta:
        model = Property
        fields = {
            'property_state': ['exact'],
            'year_built': ['lt', 'gt'],
            'tax':['lt','gt'],

        }

Call it in Viewset:

    class FilterViewSet(viewsets.ModelViewSet):

          serializer_class = SearchSerializer

         #Filters on specific fields
          filter_class = Filter



        def filter_queryset(self, queryset):
             if self.request.query_params.get('property_state', None):
              queryset = super(FilterViewSet, self).filter_queryset(self.get_queryset())
              return queryset
          else:
              queryset = self.get_queryset()
              return queryset
Salman Ahmed
  • 682
  • 1
  • 10
  • 24