我在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
问题是,
Profile.objects.create(user=user, **profile_data)
创建一个配置文件对象,而不是创建一个带有配置文件对象的用户对象?ProfileSerializer()
中定义了另一个覆盖create(),上面的例子会被触发吗?编辑:
我现在知道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关系错了吗?