使用@link()创建自定义方法,而不必传入查找字段

时间:2014-04-14 17:14:47

标签: django routes django-rest-framework

我正在尝试创建一个返回当前Screener的API端点。 筛选器是与用户一对一的模型。我想点击这个终点并返回所有必要的信息,但是,我希望它能够通过任何参数传递。 现在使用@link()装饰器时,url变为screener / {look-up-field} / current。 我希望它没有网址中的查找字段。 我的观点:

class ScreenerViewSet(viewsets.ModelViewSet):
    model = Screener
    serializer_class = ScreenerSerializer
    permission_classes = (ObjectPermissions,)
    queryset = Screener.objects.all()

    @link()
    def current(self, request, *args, **kwargs):
        screener = get_object_or_404(Screener, user__id=request.user.id)
        data = self.serializer_class(screener)
        return Response(data=data.data, status=status.HTTP_200_OK)

我的路线:

router = DefaultRouter()
router.register(r'api/screener', ScreenerViewSet)
urlpatterns += router.urls

2 个答案:

答案 0 :(得分:1)

默认的DRF @link装饰器仅适用于详细级别。

对于集合级@link@action装饰器,您可以使用drf-extensions来提供这些装饰。

答案 1 :(得分:0)

你能从方法定义中删除* args和** kwargs吗?我这是解决方案,但现在我无法测试它。