使用Django Backend过滤器过滤范围?

时间:2017-12-01 11:33:08

标签: django python-3.x django-rest-framework django-filter django-rest-viewsets

我正在使用django rest框架进行项目,其中我必须过滤用户给出的不同参数。我正在使用django Filter后端。  这是我的代码:

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

一切都很好。但现在我必须根据100平方英尺到500平方英尺的范围过滤property_area。我如何使用djangoFilter后端实现这一目标?

1 个答案:

答案 0 :(得分:0)

谢谢@Gabriel Muj。从django-filter文档我解决了我的问题。我创建了自己的过滤器类添加字段,用于过滤器。

class Filter(django_filters.FilterSet):

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

        }

在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