Django - 在运动员创建时自动创建用户(与 OneToOneField 绑定在一起)
Django - automatically create User on Athlete create (tied together with a OneToOneField)
我有一个名为 Athlete 的模型,它与作为 AbstractUser 的 User 模型具有 OneToOne 关系,每当我创建 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的名字class,所以我导入django auth用户用:
from django.contrib.auth.models import User as AuthUser
您现在使用另一个模型作为用户模型,这意味着您也使用它来注册用户,所以:
from users.models import <strong>User</strong>
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 = <strong>User</strong>.objects.create_user(email=email)
super().save(*args, **kwargs)
我有一个名为 Athlete 的模型,它与作为 AbstractUser 的 User 模型具有 OneToOne 关系,每当我创建 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的名字class,所以我导入django auth用户用:
from django.contrib.auth.models import User as AuthUser
您现在使用另一个模型作为用户模型,这意味着您也使用它来注册用户,所以:
from users.models import <strong>User</strong>
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 = <strong>User</strong>.objects.create_user(email=email)
super().save(*args, **kwargs)