Отправка списка в POST-заявке - Django Rest Framework

Я пытаюсь отправить список в POST заявке в Django Rest Framework. Моя задача выглядит следующим образом: Вложенные отношения, но мне нужен список.

Что мне нужно:

{
     "id": 3435,
     "titulo": "Livro x",
     "editora": "Editora x",
     "foto": "https://i.imgur.com/imagem.jpg",
     "autores": ["Autor 1"]
}

Что я получаю:

{
  "autores": [
    {
      "non_field_errors": [
        "Invalid data. Expected a dictionary, but got str."
      ]
    }
  ]
}

Мой файл serializers.py:

from rest_framework.serializers import ModelSerializer

from .models import Autor, Livro

class AutorSerializer(ModelSerializer):

    class Meta:
        model = Autor
        fields = ('nome')


class LivroSerializer(ModelSerializer):

    autores = AutorSerializer(many=True)

    class Meta:
        model = Livro
        fields = ('id', 'titulo', 'editora', 'autores')

    def create_autores(self, autores, livro):
        for autor in autores:
            obj = Autor.objects.create(**autor)
            livro.autores.add(obj)

    def create(self, validated_data, **kwargs):
        autores = validated_data.pop('autores')

        livro = Livro.objects.create(**validated_data)
        self.create_autores(autores, livro)

        return livro

Где я ошибаюсь?

в вашем файле views.py, для соответствующего представления добавьте следующий код для создания, если требуется, то и для обновления.

class AutorViewset(viewsets.ModelViewSet):
    queryset=Autor.objects.all()
    serializer_class=AutorSerializer

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data, 
              many=isinstance(request.data,list))
        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)

Это позволит вам передавать список в качестве входных данных в модель Autor

Вернуться на верх