【发布时间】:2021-09-25 06:36:17
【问题描述】:
我是 Django 新手。 我正在尝试通过遵循 Django 文档使用一对一关系更新另一个表中的用户详细信息,但给了我一个错误。创建新用户工作正常
模型.py
class UserDetails(models.Model):
user=models.OneToOneField(User,on_delete=models.CASCADE)
phone=models.CharField(max_length=10)
address=models.CharField(max_length=200,default="")
created=models.DateTimeField(auto_now_add=True)
updated=models.DateTimeField(auto_now_add=True)
objects=models.Manager()
def __str__(self):
return self.user.username
序列化器.py
class UserDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = UserDetails
fields= ['phone','address']
class CreateUserSerializer(serializers.ModelSerializer):
userdetails=UserDetailsSerializer()
class Meta:
model = User
fields=['id','url','username','email','password','userdetails']
def create(self,validated_data):
user_data=validated_data.pop('userdetails')
user=User.objects.create_user(**validated_data)
UserDetails.objects.create(user=user,**user_data)
user.save()
return user
def update(self,instance,validated_data):
user_data=validated_data.pop('userdetails')
user=User.objects.update(**validated_data)
UserDetails.objects.update(user=user,**user_data)
user.save()
return user
我得到的错误 - (1062, "Duplicate entry 'admin' for key 'auth_user.username'") 我知道我们可以逐列更新它,但我想一次更新所有列,因为我有很多列。我想要一个类似于create的方法。
还有一个问题是,我可以将这些创建和更新结合起来,因为它们正在做同样的事情吗?
【问题讨论】:
-
User.objects.update(**validated_data)您正在使用该查询更新 所有 数据库中的模型...
标签: python django rest serialization django-rest-framework