【问题标题】:Django reset oneToOneField on Custom User ModelDjango 在自定义用户模型上重置 oneToOneField
【发布时间】:2021-03-27 22:27:42
【问题描述】:

我有一个自定义 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,以便将其连接到新创建的对象?

【问题讨论】:

    标签: django django-rest-framework django-views one-to-one


    【解决方案1】:

    您可以将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
        )

    【讨论】:

      猜你喜欢
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 2014-01-04
      • 2016-10-07
      • 2017-07-14
      相关资源
      最近更新 更多