自定义方法更新不起作用,服务器返回500(内部服务器)

时间:2016-08-13 23:24:23

标签: python django api rest django-rest-framework

在Django Rest Framework中,我使用自定义方法更新设置了一个视图集:

def update(self, request, pk=None):

    if request.user.role == 'admin':

        category = get_object_or_404(self.queryset, pk=pk)
        serializer = self.serializer_class(category, data=request.data)

        if serializer.is_valid:
            serializer.save()
            return Response(
                serializer.data,
                status=status.HTTP_200_OK)
        return Response(
            serializer.errors,
            status=status.HTTP_400_BAD_REQUEST)
    return Response({
        'status': 'Unauthorized',
        'message': 'You do not have permission for to do this'
        }, status=status.HTTP_401_UNAUTHORIZED)

这不起作用,服务器返回错误500(内部服务器);我使用了以下自定义方法,但更新无效:

class CategoryViewSet(viewsets.ViewSet):

queryset = Category.objects.all()
serializer_class = CategorySerializer
permission_classes = (permissions.IsAuthenticated,)

def list(self, request):
    queryset = self.queryset
    serializer = self.serializer_class(queryset, many=True)

    return Response(serializer.data)

def create(self, request):
    serializer = self.serializer_class(data=request.data)

    if request.user.role == 'admin':
        if serializer.is_valid():
            serializer.save()
            return Response(
                serializer.data,
                status=status.HTTP_201_CREATED)
        return Response({
            'status': 'Bad Request',
            'message': 'We cannot create this category'
            }, status=status.HTTP_400_BAD_REQUEST)
    return Response({
        'status': 'Unauthorized',
        'message': 'You are not a administrator'
        }, status=status.HTTP_401_UNAUTHORIZED)

def retrieve(self, request, pk=None):

    category = get_object_or_404(self.queryset, pk=pk)
    serializer = self.serializer_class(category)

    return Response(serializer.data)

def update(self, request, pk=None):

    if request.user.role == 'admin':

        category = get_object_or_404(self.queryset, pk=pk)
        serializer = self.serializer_class(category, data=request.data)

        if serializer.is_valid:
            serializer.save()
            return Response(
                serializer.data,
                status=status.HTTP_200_OK)
        return Response(
            serializer.errors,
            status=status.HTTP_400_BAD_REQUEST)
    return Response({
        'status': 'Unauthorized',
        'message': 'You do not have permission for to do this'
        }, status=status.HTTP_401_UNAUTHORIZED)

def destroy(self, request, pk=None):
    pass

如您所见,方法列表,方法创建和方法检索工作,但不更新。

有什么问题?

0 个答案:

没有答案