django 1.10中处理多用户类型的正确方法

django 1.10中处理多用户类型的正确方法,django,django-models,django-forms,django-allauth,Django,Django Models,Django Forms,Django Allauth,我在谷歌上做了一些研究,找到了许多不同的解决方案来处理多用户类型。为了让我的问题更清楚,这里是要求 1) 有两种类型的用户-(一种是普通用户,另一种是开发人员) 2) 两种用户类型将具有相同的表单字段-(用户名、电子邮件、密码、密码(确认)) 下面是我尝试过的 class customUser(AbstractBaseUser): user_choice = ( ('G', 'General'), ('D', 'Developer'), )

我在谷歌上做了一些研究,找到了许多不同的解决方案来处理多用户类型。为了让我的问题更清楚,这里是要求

1) 有两种类型的用户-(一种是普通用户,另一种是开发人员)

2) 两种用户类型将具有相同的表单字段-(用户名、电子邮件、密码、密码(确认))

下面是我尝试过的

class customUser(AbstractBaseUser):
    user_choice = (
        ('G', 'General'),
        ('D', 'Developer'),
    )
    user_type = models.charField(choices=user_choices, max_length=2, default='G')

class mainUser(customUser):
    type = models.OneToOneField('customUser')
我是否必须明确处理用户名、电子邮件、密码和重新密码字段


我使用django allauth进行单用户注册和登录。我现在是否必须以不同的方式工作

如果您需要的只是视图中的不同逻辑,我会按照Jens在评论中的建议去做。使用
配置文件
扩展基本
用户
模型,如下所示:

from django.contrib.auth.models import User

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    user_choice = (
        ('G', 'General'),
        ('D', 'Developer'),
    )
    user_type = models.charField(choices=user_choices, max_length=2, default='G')
然后在注册时添加选择
user\u type
的方法,或者只提供两种不同的注册视图

在您的视图中,您需要依赖于帐户类型的逻辑:

def my_view(request):
    if request.user.profile.user_type == 'G':
         # do stuff for General users
    else:
         # do Developer stuff

基于您所共享的内容,似乎您最好只使用
配置文件
模型:看,您实际上需要构建自定义用户类型吗?也许仅仅添加一个链接到标准
用户
模型的模型就足够了,除非您需要一些特殊的逻辑。从您在这里描述的内容来看,您似乎不需要有不同的模型。@LaurentS您能给我一个创建两个不同用户的大致代码吗?用户将有选择注册过程的选项。如上所述,该选项是注册为开发者和注册为普通用户。不以自定义方式建立注册。@pythonLover用户类型之间有什么区别?您是否需要在他们的配置文件中存储不同的信息,或者该类型只会触发视图中的差异等?只是视图中的差异。我是否必须为开发人员和常规人员创建不同的注册表单视图?这是您的设计决定。我不认为你有任何理由这么做。您可能只需对标准注册表单进行子类化,并添加一个输入来选择用户想要的帐户类型。