Django-REST框架:将嵌套的JSON扁平化为多个对象

2024-09-30 01:38:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含父字段的子模型,我从一个API(我无法控制它的格式)得到一个JSON。在

在模型.py公司名称:

class ChildModel(models.Model):
    name = models.CharField(max_length=100)
    age = models.IntegerField()
    parent = models.CharField(max_length=100)

在API.json文件公司名称:

^{pr2}$

我正在尝试编写一个序列化程序,它将获得这个JSON并创建3个不同的子对象。在

我设法为一个孩子这样做:

class ChildSerializer(serializers.Serializer):
    name = serializers.CharField()
    age = serializers.IntegerField()

class ParentSerializer(serializers.ModelSerializer):
    parent_name = serializers.CharField()
    children = ChildSerializer(source='*')

    class Meta:
        model = ChildModel
        fields = ('parent_name', 'children')

但是当一个父母有多个孩子时,我不知道如何挽救多个孩子。在

我试着把它改成这样:

children = ChildSerializer(source='*', many=True)

但经验证的数据如下所示:

OrderedDict([(u'parent_name', u'Homer'), (u'name', u'age')])

有什么建议吗?在


Tags: name模型名称apijsonagemodels孩子
1条回答
网友
1楼 · 发布于 2024-09-30 01:38:37

您需要自定义序列化程序,以便它创建所有子级。为此,使用create()方法。在

试试这个:

class ParentSerializer(serializers.Serializer):
    parent_name = serializers.CharField()
    children = ChildSerializer(many=True)

    def create(self, validated_data):
        parent_name = validated_data['parent']

        # Create or update each childe instance
        for child in validated_data['children']:
            child = Child(name=child['name'], age=child['age'], parent=valid, parent=parent_name)
            child.save()

        return child

问题是你没有Parent模型。这就是为什么我不知道在create()方法中返回什么。根据您的情况,更改return child行。在

希望有帮助!在

相关问题 更多 >

    热门问题