2016-08-30 40 views
0

我想在视图中使用django过滤器,该视图具有其他一些行为,但不返回视图集检索或列表方法。 我的代码如下:如何在detail_route()视图中应用djngoFilterBackend

class ArticleView(ReadOnlyModelViewSet): 
    serializer_class = get_serializer_class(Article) 
    queryset = Article.objects.all() 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_fields = ('TYPE',) 

    @detail_route() 
    def articles(self, request, pk=None): 
     some_behaviour() 
     return MY QUERYSET (which can or cannot be modified) FILTERED 

因此受到打击/api/articles及其衍生物的查询集被正确地过滤,另外,如果我回到self.retrieve(请求)(明显),但我不能修改我的查询集。那么我的问题是,在那种情况下,明确应用django过滤器需要什么,或者我该如何告诉他这样做,而不是执行r equest.query_string.pop(bla bla bla)

谢谢!

回答

0

我最近有类似的问题。

我发现ViewSet.filter_queryset()函数正在做这件事。

记住ViewSet.get_object()也使用self.filer_queryset()这样会让你的detailed_route方法usinq get_object_by_pk()像:

class ViewSet: 
    def get_object_by_pk(self, pk): 
     return self.get_queryset().get(pk=pk) 

    @detail_route(): 
    def something(self, request, pk): 
     object = self.get_object_by_pk(pk) 
     queryset = object.whatevet_set 
     page = self.paginate_queryset(self.filter_queryset(queryset)) 

     if page is not None: 
      serializer = SerializerClass(page, many=True, context={'request': request}) 
      return self.get_paginated_response(serializer.data) 
     serializer = SerializerClass(queryset, many=True, context={'request': request}) 
     return Response(serializer.data) 
相关问题