Estoy tratando de consumir datos de una API de devolución de llamada que envía la solicitud POST en este formato:
[ { "key1": "asd", "key2": "123" } ]Sin embargo, mi API actualmente solo funciona cuando se envía así:
{ "key1": "asd", "key2": "123" }serializadores.py:
class RawIncomingDataSerializer(serializers.ModelSerializer): class Meta: model = RawIncomingData fields = '__all__'vistas.py:
class RawIncomingDataViewSet(viewsets.ModelViewSet): queryset = RawIncomingData.objects.all() serializer_class = RawIncomingDataSerializerSolo habrá un objeto en los datos de la publicación, por lo que estoy buscando un trabajo sencillo sin tener que volver a escribir mi serializador para interpretar varios objetos en una solicitud de publicación.
En ese caso, puede anular create y especificar explícitamente many=True en la llamada get_serializer :
class RawIncomingDataViewSet(viewsets.ModelViewSet): ... def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data, many=True) 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)La idea es pasar many=True a la clase del serializador. Entonces, elegiría anular el get_serializer(...) , como
class RawIncomingDataViewSet(viewsets.ModelViewSet): queryset = RawIncomingData.objects.all() serializer_class = RawIncomingDataSerializer def get_serializer(self, *args, **kwargs): if self.action == "create": kwargs["many"] = True return super().get_serializer(*args, **kwargs)