Django rest框架一对一关系创建串行器
问题描述:
我是Django Rest Frame工作的初学者。我想创建一个自定义用户,但长期以来我有一个问题,我尝试通过许多论坛来寻找解决方案,但不幸的是,我没有成功。希望大家帮我Django rest框架一对一关系创建串行器
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
答
你的问题是在这里:
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()
提供正确的数据来创建一个User实例。
希望有所帮助。
问题修复:)谢谢你 – asus1902