【发布时间】:2020-09-02 09:05:23
【问题描述】:
我正在使用 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)
网址:
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 {}
如果我使用 APIView POST 成功。
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
【问题讨论】:
-
请格式化您的代码,以便其他人可以阅读
-
在调用
list()和create()方法时不需要传递self -
使用
return self.list(request, *args, **kwargs)和self.create(request, *args, **kwargs)