Django REST API如何接收POST请求内列表格式而非字典格式的单条数据
适配方案
仅需重写视图集的create方法,在数据传入序列化器之前剥离外层列表即可,无需修改现有序列化器或模型代码,修改后的views.py代码如下:
from rest_framework import status from rest_framework.response import Response from rest_framework import viewsets from .serializers import RawIncomingDataSerializer from .models import RawIncomingData class RawIncomingDataViewSet(viewsets.ModelViewSet): queryset = RawIncomingData.objects.all() serializer_class = RawIncomingDataSerializer def create(self, request, *args, **kwargs): # 提取列表内的单条数据作为实际提交载荷 submit_data = request.data[0] if isinstance(request.data, list) else request.data serializer = self.get_serializer(data=submit_data) 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)
方案说明
- 保留原有全部序列化校验逻辑,无需调整序列化器代码
- 仅对POST创建请求生效,不影响视图集其他接口的正常运行
- 同时兼容原有字典格式和回调方发送的单元素列表格式的请求载荷,适配性更强
内容的提问来源于stack exchange,提问作者5muqcS7AknXPSt
相关产品推荐
相关产品推荐

