POST方法的DRF request.data问题

时间:2020-09-02 09:05:23

标签: django-rest-framework

我正在使用DRF测试api,当我发布数据时,DRF返回status_code 500并且错误“ MacList”对象没有属性“ data”。但是GET没问题。

观看次数:

class MacList(mixins.ListModelMixin,mixins.CreateModelMixin,generics.GenericAPIView):

queryset = Testable.objects.all()
serializer_class = TestableSerializer
def get(self,request,*args,**kwargs):
    return self.list(self, request, *args, **kwargs)

def post(self,request,*args,**kwargs):
    return self.create(self, request, *args, **kwargs)

URL:

path(r'api/maclist',views.MacList.as_view())

我正在检查mixins.CreateModelMixin源代码

class CreateModelMixin:

"""
Create a model instance.
"""
def create(self, request, *args, **kwargs):
    serializer = self.get_serializer(data=request.data) **#### problem here**
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)

def perform_create(self, serializer):
    serializer.save()

def get_success_headers(self, data):
    try:
        return {'Location': str(data[api_settings.URL_FIELD_NAME])}
    except (TypeError, KeyError):
        return {}

如果我使用API​​View来成功发布。

class MacList(APIView):

def post(self,request):
    serializer = TestableSerializer(data=request.data)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data,status=status.HTTP_201_CREATED)
    return Response(serializer.errors,status=status.HTTP_400_BAD_REQUEST)

请帮助我!

Django-> 3.0.8

djangorestframework-> 3.11.0

1 个答案:

答案 0 :(得分:0)

从派生类调用时不需要将派生类实例传递给继承的类方法,当我们使用self时python会自动传递这个实例

如果您将代码更改为

,它将起作用
.
.
def get(self,request,*args,**kwargs):
    return self.list(request, *args, **kwargs)

def post(self,request,*args,**kwargs):
    return self.create(request, *args, **kwargs)