如何在ModelViewSet中使用自定义视图的参数

时间:2014-12-06 23:41:24

标签: django django-rest-framework

我想在我的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)

同样,我不确定我应该在哪里或如何传递这些参数,或者我想做什么甚至是正确的,但这似乎是一种非常常见的用途。

1 个答案:

答案 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执行此操作。