如何在Django请求上发送JSON以创建新的用户和配置文件?

时间:2017-03-06 22:04:41

标签: python json django rest django-rest-framework

从django rest框架网站示例我写了我的UserSerializer.py,我的ProfileSerializer是这样的:

class ProfileSerializer(serializers.ModelSerializer):

    class Meta:
        model = Profile
        fields = ['facebook_id', 'facebook_token', 'push_device_token', 'photo', 'status', 'level']

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

我正在发送这样的JSON请求:

{
   "username":"admin",
   "email":"e@e.com",
   "password":12345678,
   "profile":{
      "status":1,
      "level":1,
      "facebook_id":1,
      "facebook_token":1,
      "push_device_token":1,
      "photo":"url.com"
   }
}

但我只收到错误:

  

尝试在序列化程序profile上获取字段UserSerializer的值时出现AttributeError。

     

序列化程序字段可能名称不正确,与User实例上的任何属性或键都不匹配。

     

原始例外文字是:'用户'对象没有属性' profile'。

1 个答案:

答案 0 :(得分:1)

我认为可能缺乏对User模型的引用。假设您的个人资料模型如下所示:

class Profile(models.Model):
    user = models.ForeignKey(User)

模型用户将具有profile_set属性,而不是profile。要调整此项,请使用related_name

class Profile(models.Model):
    user = models.OneToOneField(User, related_name='profile')