我想在视图中使用django过滤器,该视图具有一些其他行为,而不返回视图集检索或列表方法。 我的代码如下:
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(请求)(显然),但我无法修改我的查询集。那么我的问题是,在那种情况下应用scjito过滤器需要什么,或者我怎么能告诉他这样做而不是做r equest.query_string.pop(bla bla bla)
。
谢谢!
答案 0 :(得分:0)
我最近遇到了类似的问题。
我发现ViewSet.filter_queryset()
函数正是这样做的。
请注意,ViewSet.get_object()
也使用self.filer_queryset()
,因此请使用detailed_route
方法使用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)