Django休息框架一对一关系创建序列化器

时间:2016-09-25 18:23:14

标签: python django rest django-rest-framework

我是Django Rest Frame工作的初学者。我想创建一个自定义用户,但我有一个问题,从很长一段时间我试图通过许多论坛找到解决方案,但不幸的是我没有成功。希望你帮助我

models.py

class Account(models.Model):

    user=models.OneToOneField(User,on_delete=models.CASCADE)
    image=models.ImageField(upload_to='Images/',default='Images/user.png')
    date=models.DateField(auto_now=True,auto_now_add=False)

Serializers.py

 class AccountCreateUpdateSerializer(serializers.ModelSerializer):


    user=UserListSerializers()
    image=serializers.ImageField()

    class Meta:
      model= Account
      fields=['id','user','image']
    def create(self,validated_data):
       user_data=validated_data.pop('user')
       account=Account.objects.create(**validated_data)
       User.objects.create(account=account,**user_data)

       return account

错误: enter image description here

1 个答案:

答案 0 :(得分:3)

你的问题在这里:

   user_data = validated_data.pop('user')
   account = Account.objects.create(**validated_data)
   User.objects.create(account=account, **user_data)

您在创建用户之前尝试创建帐户,但由于帐户需要user_id的值,因此无法使用该帐户。如果您的用户模型具有帐户的外键,而不是相反,那么首先创建帐户将是正确的方法。

切换到:

   user_data = validated_data.pop('user')
   user = User.objects.create(**user_data)
   account = Account.objects.create(user=user, **validated_data)
只要您的UserListSerializers()提供正确的数据来创建用户实例,

就可以解决问题。

希望有所帮助。