[英]Django REST Framework: Flatten nested JSON to many objects
我有這個包含父字段的子模型,我從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',
"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')])
任何建議如何使它成為可能?
您需要自定義序列化程序,以便創建所有子項。 為此,使用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
行。
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.