Django - автоматическое создание пользователя при создании спортсмена (связано с полем OneToOneField)

У меня есть модель Athlete, которая имеет отношение OneToOne к модели User, которая является AbstractUser, я пытаюсь создать пользователя каждый раз, когда я создаю Athlete и автоматически связать их вместе, но я получаю ошибку:

Manager isn't available; 'auth.User' has been swapped for 'users.User'

Вот моя модель пользователя:

class User(AbstractUser):
    is_athlete = models.BooleanField(default=False)
    is_coach = models.BooleanField(default=False)
    is_owner = models.BooleanField(default=False)

    def save(self, *args, **kwargs):
        self.is_athlete = Athlete.objects.filter(user=self).exists()
        self.is_coach = Coach.objects.filter(user=self).exists()
        self.is_owner = Organization.objects.filter(owner=self).exists()
        super().save(*args, **kwargs)

и модели спортсменов (на данный момент):

class Athlete(models.Model):
    user = models.OneToOneField(User, blank=True, null=True, on_delete=models.SET_NULL)
    coach = models.ForeignKey(Coach, blank=True, null=True, on_delete=models.SET_NULL, related_name='coach')

    def save(self, *args, **kwargs):
        try:
            User.objects.get(email=kwargs.get('email'))
            print('User with this mail already exists')
        except User.DoesNotExist:
            print('User with this mail does not exist')
            new_user = AuthUser.objects.create_user(email=email)
            self.user = new_user
            new_user.save()
        super().save(*args, **kwargs)

Я вызываю AuthUser.objects.create_user, потому что User уже является именем класса User, поэтому я импортирую пользователя django auth с:

from django.contrib.auth.models import User as AuthUser

Теперь вы используете другую модель в качестве модели пользователя, что означает, что вы также используете ее для регистрации пользователей, так:

from users.models import User

class Athlete(models.Model):
    user = models.OneToOneField(User, blank=True, null=True, on_delete=models.SET_NULL)
    coach = models.ForeignKey(Coach, blank=True, null=True, on_delete=models.SET_NULL, related_name='coach')

    def save(self, *args, **kwargs, email=None):
        try:
            self.user = User.objects.get(email=email)
        except User.DoesNotExist:
            self.user = new_user = User.objects.create_user(email=email)
        super().save(*args, **kwargs)
Вернуться на верх