-1

我尝试在 Django Rest Framework 的 POST 申请中发送列表。我的目标是这样的:嵌套关系,但我想要一个列表。

我需要的:

{
     "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

我哪里错了?

4

1 回答 1

0

在您的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 模型

于 2021-10-13T16:43:47.643 回答