首页 > 解决方案 > Django Rest API - 无法发出 PUT 或 DELETE 请求

问题描述

我有一个 django Rest API,想通过 Flutter 或 Postman 发出一个 put 请求。最终发生的事情是,当我发出 put 请求时,它会返回一个响应(看起来它已更改,打印出来),但实际上它从未真正更改过。这是我的代码!

class UserProfileView(viewsets.ModelViewSet):
queryset = UserProfile.objects.all()
serializer_class = UserProfileSerializer

class AssignmentView(viewsets.ModelViewSet):
queryset = Assignment.objects.all()
serializer_class = AssignmentSerializer

filter_backends = (
    django_filters.rest_framework.DjangoFilterBackend,
    rest_framework.filters.OrderingFilter, 
)
filter_fields = ['studyplan']

class UserAssignmentView(AssignmentView):
http_method_names = ['get', 'post', 'put', 'delete']
def get_queryset(self):
    return Assignment.objects.filter(canview__user=self.request.user)

def put(self, request, format=None):
    return Response({'received data': request.data})

def delete(self, request, format=None):
    return Response({'received data': request.data})


class StudyplanView(viewsets.ModelViewSet):
queryset = Studyplan.objects.all()
serializer_class = StudyplanSerializer

class UserStudyplanView(StudyplanView):
def get_queryset(self):
    return Studyplan.objects.filter(canview__user=self.request.user)

标签: pythondjangodjango-rest-frameworkrequestdjango-views

解决方案


问题是您覆盖了两个putdelete方法,并且在它们内部什么都不做。尝试super()在其中调用方法:

class UserAssignmentView(AssignmentView):
    http_method_names = ['get', 'post', 'put', 'delete']
    def get_queryset(self):
        return Assignment.objects.filter(canview__user=self.request.user)

    def put(self, request, format=None):
        super().partial_update(request, format)
        return Response({'received data': request.data})

    def delete(self, request, format=None):
        super().destroy(request, format)
        return Response({'received data': request.data})

推荐阅读