有两种解决方案来解决您的问题:
第一个解决方案是覆盖.create()
视图的方法
默认情况下,django rest框架假定您将其传递给单个对象。要考虑将其传递给对象列表的可能性,可以按以下方式重写它:
def create(self, request, pk=None, company_pk=None, project_pk=None): is_many = True if isinstance(request.data, list) else False serializer = self.get_serializer(data=request.data, many=is_many) 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数据中的单个对象以及对象列表。
第二种解决方案是使用第三方程序包
django-rest-framework-bulk提供上述功能以及其他功能(例如,批量更新)。您可以签出并确定它是否满足您的需求。
更新:基于函数的视图的解决方案
为了使其与基于函数的视图一起使用,方法是相似的:
@api_view(['POST'])def post_calculation(request): if request.method == 'POST': is_many = True if isinstance(request.data, list) else False # JSON to serializer object serializer = SearchRequestSerializer(data=request.data, many=is_many) if (serializer.is_valid() is False): # use `is False` syntax rather than `== False` in Python return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) serializer.save() #-- do some processing stuff here --- return Response(serializer.data)
不要
.create()直接调用方法,
.save()而是使用。另外,
many=False在序列化程序上使用时,可以在下找到创建的实例
serializer.instance。我不确定如何获取已创建实例的列表。您可以尝试相同的方法
serializer.instance。如果它不起作用,请尝试查找如何获得它。



