我正在编写实现三种不同用户类型的应用程序:
Admin user
(Django Admin)Mobile user
(django rest framework)External user
(django rest framework)问题是External user
和Mobile user
与Admin user
有很大不同,例如他们使用不同类型的用户名字段进行身份验证(以及不同的身份验证后端),所以我可以不要这样做:
AUTH_USER_MODEL = "AdminUser"
class AdminUser(DjangoAbstractUser):
username = models.EmailField()
class MobileUser(User)
custom_field = ...
class ExternalUser(User)
custom_field = ...
问题是,如果我使用三个单独的类(代码在下面)和三个不同的身份验证后端,那会有什么后果吗?例如,request.user
将存储三种类型:ExternalUser
,MobileUser
和AdminUser
。
AUTH_USER_MODEL = "AdminUser"
class AdminUser(DjangoAbstractUser):
username = models.EmailField()
class MobileUser(DjangoAbstractUser)
username = models.IntegerField()
custom_field = ...
class ExternalUser(DjangoAbstractUser)
username = models.CharField()
custom_field = ...
谢谢。
答案 0 :(得分:1)
这是一种常见的反模式。不要这样做。您将不得不花费三倍的努力来使您的项目工作。相反,你需要的是一个UserProfile模型(你必须为大多数项目创建它)
class UserProfile(models.Model):
ADMIN = 'A'
MOBILE = 'M'
EXTERNAL = 'E'
USER_CHOICES = ( (ADMIN,'Admin), ....)
user = models.OnetoOneField(User)
user_type = models.CharField(max_length=2,choices = USER_CHOICES )
这为您提供了相同的信息,但只有一个模型,而且实施和维护更简单