如何解决Django 在自定义用户模型上重置 oneToOneField
我有一个自定义 User 模型,它与 UserProfile 模型具有一对一的关系。我想创建一个新的 UserProfile 对象并将现有的相关 UserProfile 对象切换为新创建的对象。
这基本上就是我想要做的:
**views.py**
def perform_create(self,serializer):
club = serializer.save(created_by=self.request.user)
user = self.request.user
user.current_userprofile = None
user.save()
UserProfile.objects.create(
user_account=self.request.user,club=club,current_active_userprofile=self.request.user,is_admin=True
)
**models.py**
class UserProfile(models.Model):
user_account = models.ForeignKey(UserAccount,related_name='userprofiles',on_delete=models.CASCADE)
club = models.ForeignKey(Club,related_name='club_userprofiles',on_delete=models.CASCADE)
current_active_userprofile = models.OneToOneField(UserAccount,related_name='current_userprofile',on_delete=models.SET_NULL,blank=True,null=True)
is_admin = models.BooleanField(default=False)
但是,perform_create 方法会触发完整性错误:
UNIQUE 约束失败: userprofile_userprofile.current_active_userprofile_id
如何将字段重置为 NULL,以便将其连接到新创建的对象?
解决方法
您可以使用以下命令将 current_active_userprofile
设置为 None
:
def perform_create(self,serializer):
club = serializer.save(created_by=self.request.user)
user = self.request.user
current_profile = user.current_userprofile
current_profile.current_active_userprofile = None
current_profile.save()
user.save()
UserProfile.objects.create(
user_account=self.request.user,club=club,current_active_userprofile=self.request.user,is_admin=True
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。