вставка во вложенный сериализатор в DRF - PullRequest
0 голосов
/ 15 января 2020

В настоящее время я использую 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"]

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

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

            [

               { "phone":12345
               },

               { "phone":54321
               }
            ]

    }

1 Ответ

2 голосов
/ 15 января 2020

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

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

по умолчанию доступны только для чтения. Если вы хотите поддерживать операции записи во вложенное поле сериализатора, вам нужно создать метод 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
...