在DRF中的嵌套序列化程序中插入

时间:2020-01-15 13:31:58

标签: django django-rest-framework serialization

目前我正在使用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 个答案:

答案 0 :(得分:2)

如果我正确理解您对writable nested serializers的关注。

如文档所述,

默认情况下,嵌套序列化器是只读的。如果你想支持 您需要创建的对嵌套序列化器字段的写操作 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