在django 1.10

时间:2017-03-11 11:45:35

标签: django django-models django-forms django-allauth

我在google上研究了一下,发现了许多处理多种用户类型的不同解决方案。为了使我的问题更清楚,这是要求

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进行单用户注册和登录。我现在必须以不同的方式工作吗?

1 个答案:

答案 0 :(得分:0)

如果您需要的只是视图中的不同逻辑,我会按照Jens在评论中的建议行事。使用User扩展基本Profile模型,如下所示:

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_type的方法,或者只提供2个不同的注册视图。

在您的观看中,您需要的逻辑取决于帐户类型:

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