django过滤后端在django rest框架中的条件?

时间:2017-11-08 17:54:59

标签: python django rest django-rest-framework django-filter

我在几个字段上使用Django过滤后端,效果非常好。但是我希望在获得特定条件时过滤字段,如果user_type是基本获取过滤器查询,否则从模型中获取所有对象。过滤器的采矿代码在这里:

http_method_names = ['get']
serializer_class = SearchSerializer
pagination_class = LargeResultsSetPagination


filter_backends = (DjangoFilterBackend,)
filter_fields = ('property_zipcode', 'property_state', 'property_county',)

我需要的是:

def get_queryset(self):
    if self.request.query_params.get('basic',None):
       filter_backends = (DjangoFilterBackend,)
       filter_fields = ('property_zipcode', 'property_state', 'property_county',)
       return filtered_query # I want to return filter query from here.

    queryset = property.objects.all();
    return queryset

我是Django rest框架和django过滤后端的新手。如果有人试过这件事,请帮助我。

1 个答案:

答案 0 :(得分:3)

这就是你需要的:

class YourClass(ModelViewSet):
    serializer_class = SearchSerializer
    pagination_class = LargeResultsSetPagination
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('property_zipcode', 'property_state', 'property_county',)

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

覆盖get_queryset将无法满足您的期望,因为filter_queryset方法在get_queryset方法之后由框架调用,DRF get_queryset然后按{{1}过滤它方法。