вставка во вложенный сериализатор в DRF

В настоящее время я использую django rest_framework. У меня есть два разных имени класса как Customer и Customerinfo. Мой код работает точно. Теперь я хочу вставить значение в сериализатор клиента. В CustomerSerializer есть поле Customerinfo. Это сериализатор:

    class CustomerinfoSerializer(serializers.ModelSerializer):

        class Meta:
            model = Choice
            fields = ['id','phone']


    class CustomerSerializer(serializers.ModelSerializer):
        info = CustomerinfoSerializer(many=True, source='customerinfo_set')

        class Meta:
            model = Question
            fields = ["id","name","info"]

Как я могу использовать метод сообщения, чтобы вставить значение? выборочные значения:

{
        "name": "user10",
        "info":

            [

               { "phone":12345
               },

               { "phone":54321
               }
            ]

    }

Всего 1 ответ


Если я правильно вас понимаю, вы ищете для записи вложенные сериализаторы .

Как сказано в документации,

по умолчанию вложенные сериализаторы доступны только для чтения. Если вы хотите поддерживать операции записи во вложенное поле сериализатора, вам нужно создать метод create ().

Вы можете попробовать что-то похожее на это (но вам нужно изменить название):

class CustomerSerializer(serializers.ModelSerializer):

    info = CustomerinfoSerializer(many=True, source='customerinfo_set')

    class Meta:
        model = Question
        fields = ["id", "name", "info"]

    def create(self, validated_data):
        info_data = validated_data.pop('info')
        question = Question.objects.create(**validated_data)
        for info in info_data:
            Choice.objects.create(question=question, **info)
        return question

Есть идеи?

10000