如何在Django Rest Framework中保存多级嵌套对象

时间:2015-02-11 07:48:27

标签: django django-rest-framework

我在http://www.django-rest-framework.org/topics/3.0-announcement/上阅读了一个示例,该示例以下面的代码段为例,但我没有完全遵循它。

class UserSerializer(serializers.ModelSerializer):
    profile = ProfileSerializer()

    class Meta:
        model = User
        fields = ('username', 'email', 'profile')

    def create(self, validated_data):
        profile_data = validated_data.pop('profile')
        user = User.objects.create(**validated_data)
        Profile.objects.create(user=user, **profile_data)
        return user

问题是,

  1. 为什么首先创建一个用户对象,然后用Profile.objects.create(user=user, **profile_data)创建一个配置文件对象,而不是创建一个带有配置文件对象的用户对象?
  2. 如何处理多级嵌套对象,比如说profile类下面有另一个“多对多”关系字段?如果我在ProfileSerializer()中定义了另一个覆盖create(),上面的例子会被触发吗?
  3. 编辑:

    我现在知道User是Profile的外键字段,因此在创建配置文件之前必须有一个用户对象。我的情况可能有点不同,或者是同样的情况,但我还没有完全明白这一点?

    class Endpoint(models.Model):
        ....
    
    class ConnectedHost(models.Model):
        ....
        endpoints = models.ManyToManyField(Endpoint)
    
    class Connection(models.Model):
        ....        
        connectedhosts = models.ManyToManyField(ConnectedHost)
    

    基本上我的Connection对象数据看起来像

    {
      "ConnectedHost": {
        "endpoints": [
          {
            "URL": "111.111.111.111"
          }
        ]
      }
    }
    

    我应该如何为每个实现Serializer create()函数?我在这里使用ManyToMany关系错了吗?

0 个答案:

没有答案