我有这个带有父字段的子模型,我从 API 获取一个 JSON(我无法控制它的格式)。
模型.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',
"children":[
{
"name":'Bart',
"age":20
},
{
"name":'Lisa',
"age":15
},
{
"name":'Maggie',
"age":3
}
]
}
我正在尝试编写一个序列化程序来获取此 JSON 并创建 3 个不同的子对象。
我设法为一个 child 做了这件事:
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')
但是当一个parent有多个child时,我不知道如何保存多个child。
我试过这样改:
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
问题是您没有Parent
模型。这就是为什么我不知道在 create()
方法中返回什么。根据您的情况,更改 return child
行。
希望对您有所帮助!
关于python - Django REST 框架 : Flatten nested JSON to many objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45738663/