Django中不同用户类型的单独类

时间:2017-03-22 23:45:49

标签: django

我正在编写实现三种不同用户类型的应用程序:

  • Admin user(Django Admin)
  • Mobile user(django rest framework)
  • External user(django rest framework)

问题是External userMobile userAdmin user有很大不同,例如他们使用不同类型的用户名字段进行身份验证(以及不同的身份验证后端),所以我可以不要这样做:

AUTH_USER_MODEL = "AdminUser"

class AdminUser(DjangoAbstractUser):
    username = models.EmailField()

class MobileUser(User)
    custom_field = ...

class ExternalUser(User)
    custom_field = ...

问题是,如果我使用三个单独的类(代码在下面)和三个不同的身份验证后端,那会有什么后果吗?例如,request.user将存储三种类型:ExternalUserMobileUserAdminUser

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 = ...

谢谢。

1 个答案:

答案 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 )

这为您提供了相同的信息,但只有一个模型,而且实施和维护更简单