Issue
I have a model called Athlete that has a OneToOne relation to the User model which is an AbstractUser, I'm trying to create a user whenever I create an Athlete and automatically tie them together but I'm getting an error:
Manager isn't available; 'auth.User' has been swapped for 'users.User'
Here's my User Model:
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)
and the Athlete Models (so far):
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)
I'm calling AuthUser.objects.create_user because User is already the name of the User class, so I import the django auth user with:
from django.contrib.auth.models import User as AuthUser
Solution
You now use another model as user model, so that means that you also use this to register users, so:
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)
Answered By - Willem Van Onsem
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.