簡體   English   中英

Django REST框架:將嵌套的JSON拼接到許多對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM