我想在我的ModelViewSet中使用@list_route装饰器创建一个自定义视图,该装饰器需要几个参数。我似乎无法找到这样的例子。
我想我希望我的功能看起来像:
@list_route()
def my_list(self, request, arg1, arg2, arg3):
models = Model.objects.all().filter( """do some filtering with my args""" )
serializer = ModelSerializer(models, many=True, context={'request': request})
return Response(serializer.data)
同样,我不确定我应该在哪里或如何传递这些参数,或者我想做什么甚至是正确的,但这似乎是一种非常常见的用途。
答案 0 :(得分:8)
听起来您希望使用查询参数来过滤您的查询集。 Django REST Framework为过滤查询集through the filtering backends提供了很多帮助。
filtering through the query parameters有一个特定的部分,听起来就像你用的那样。它使用request.query_params
,这是Django REST Framework添加的自定义方法,它收集传入的所有查询参数。
如果您正在寻找in-url过滤(例如/api/users/search/:search
),那么您需要修改为查询集生成的URL以提供这些额外参数。 Django REST Framework不提供使用Router
类的简单方法,但您可以通过manually registering the urls with Django执行此操作。