我有两种类型的用户美术师和客户。到目前为止,我有这个 在models.py
中class User(AbstractBaseUser, PermissionsMixin):
Email = models.EmailField(unique=True)
USERNAME_FIELD = 'Email'
objects = MyUserManager()
class Customers(models.Model):
User = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
CustomerID = models.AutoField(primary_key=True)
class Artists(models.Model):
User = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
ArtistID = models.AutoField(primary_key=True)
我使用电子邮件作为身份验证,直到艺术家也想成为客户,这是一件好事。 并且他/她不能有两个帐户,一个帐户是“客户”,另一个帐户是“艺术家”,具有相同的电子邮件地址。
这是我的问题:
答案 0 :(得分:1)
我发现从Users派生子类通常是个坏主意。
相反,使用custom user model并为各种角色添加标志(是的,我是故意从AbstractUser
派生的;许多应用期望.username
是一件事情,并且您可以始终假设username == email
):
class User(AbstractUser, PermissionsMixin):
is_customer = models.BooleanField(default=False)
is_artist = models.BooleanField(default=False)
我还建议研究类似django-allauth的应用程序(它将与自定义用户模型一起使用),以简化整个注册/登录/密码更改/电子邮件确认流程。
答案 1 :(得分:0)
为解决我的问题,我做了一些更改,在Artist和Customer之间创建了一个OneToOne关系。像下面的代码:
class User(AbstractBaseUser, PermissionsMixin):
Email = models.EmailField(unique=True)
USERNAME_FIELD = 'Email'
objects = MyUserManager()
class Customers(models.Model):
User = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
CustomerID = models.AutoField(primary_key=True)
class Artists(models.Model):
Customer = models.OneToOneField(Customers, on_delete=models.CASCADE)
ArtistID = models.AutoField(primary_key=True)