简体   繁体   English

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

[英]Conditions on django filter backend in django rest framework?

I am using Django filter backend on few fields which is working very good. 我在几个领域使用Django过滤后端,这是非常好的。 But i want to filter fields when i get specific condition Like if user_type is basic get filter query otherwise get all objects from model. 但是我希望在获得特定条件时过滤字段,如果user_type是基本获取过滤器查询,否则从模型中获取所有对象。 Mine code for filters is here: 过滤器的矿山代码在这里:

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


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

The thing i need is: 我需要的是:

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

I am new to Django rest framework and django filter backend. 我是Django休息框架和django过滤后端的新手。 If anyone tried do to this thing please help me out. 如果有人试过这件事,请帮助我。

this is what you need: 这就是你需要的:

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

override get_queryset won't work as your expectation,because filter_queryset method is called by framework after get_queryset method,DRF get_queryset then filter it by filter_queryset method. 覆盖get_queryset将无法正常工作,您的期望,因为filter_queryset方法由后框架调用get_queryset方法,DRF get_queryset然后通过过滤它filter_queryset方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM