Python Django REST框架:将嵌套JSON展平到多个对象
我有一个包含父字段的子模型,我从一个API(我无法控制它的格式)获取一个JSON models.py:Python Django REST框架:将嵌套JSON展平到多个对象,python,json,django,django-rest-framework,deserialization,Python,Json,Django,Django Rest Framework,Deserialization,我有一个包含父字段的子模型,我从一个API(我无法控制它的格式)获取一个JSON models.py: class ChildModel(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() parent = models.CharField(max_length=100) API.json: { "parent_name":'Homer', "c
class ChildModel(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
parent = models.CharField(max_length=100)
API.json:
{
"parent_name":'Homer',
"children":[
{
"name":'Bart',
"age":20
},
{
"name":'Lisa',
"age":15
},
{
"name":'Maggie',
"age":3
}
]
}
我正在尝试编写一个序列化程序,它将获得这个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')])
但经过验证的数据如下所示:
children = ChildSerializer(source='*', many=True)
OrderedDict([(u'parent_name', u'Homer'), (u'name', u'age')])
有什么建议吗?您需要自定义序列化程序,以便它创建所有子项。为此,使用了
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
问题是您没有父级模型。这就是为什么我不知道在create()
方法中返回什么。根据您的情况,更改该返回子项
行
希望有帮助 可能重复:F.y.i.
child
的复数形式是children
。在某些情况下,儿童可能不需要自己的模型
。drf支持。不知道这是否有帮助。@demux谢谢你的英语课,我更新了帖子。在我的例子中,我确实需要一个子模型(因为我甚至没有父模型),所以ArrayField不是一个选项。