【问题标题】:insertion in nested serializer in DRF插入 DRF 中的嵌套序列化程序
【发布时间】:2020-01-15 13:31:58
【问题描述】:

目前我正在使用 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
               }
            ]

    }

【问题讨论】:

  • 你能添加你的模型吗?
  • 如果您询问如何进行测试并填充您的数据库,您可以使用 requests 包。简单的例子:request.post(url, data) - data 是一个字典,就像你的例子一样。

标签: django django-rest-framework serialization


【解决方案1】:

如果我理解正确,您正在寻找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

【讨论】:

  • 在这一行info_data = validated_data.pop('info') 显示KeyError: 'info'
猜你喜欢
  • 2018-08-30
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 2016-03-22
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多