我正在尝试创建一个返回当前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
答案 0 :(得分:1)
默认的DRF @link
装饰器仅适用于详细级别。
对于集合级@link
和@action
装饰器,您可以使用drf-extensions来提供这些装饰。
答案 1 :(得分:0)
你能从方法定义中删除* args和** kwargs吗?我这是解决方案,但现在我无法测试它。