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)