在Django 1.11中更改用户名max_length(django.contrib.auth)

时间:2017-06-07 19:50:15

标签: python django

我的用户使用电子邮件地址作为用户名,这导致Django 1.9出现问题,因为最多有30个字符username长度。

这是Django 1.10的supposed to be fixed,限制为150个字符,我相信(尽管看起来the docs实际上说max_length应该能够达到191个字符某些数据库)。

我升级到Django 1.11但username似乎仍然限制为30个字符。是因为我需要在某处设置max_length的值吗?如果是这样,我在哪里设置它(一个例子会很棒)?如果没有,我该如何增加最大长度?

这是我目前的观点。

def register(request):
    alreadyRegistered = False
    invalidID = False
    context_dict = {}
    if request.method == 'POST':
        # Gather the username and password provided by the user.
        # This information is obtained from the login form.
        Userid = request.POST['username']
        Userid = Userid[0:29] # horrible work-around that has to change
        if User.objects.filter(username=Userid).count() > 0:
            alreadyRegistered = True
        else:
            isGU = 1 > 0 # this will always = TRUE for now
            if isGU or isEA:
                firstname = request.POST['firstname']
                lastname = request.POST['lastname']
                email = Userid
                password = request.POST['password']
                user = User.objects.create_user(Userid, email, password)
                user.first_name = firstname
                user.last_name = lastname
                user.save()
                registered = True
                user = authenticate(username=Userid, password=password)
                login(request, user)
                return HttpResponseRedirect('/studentprogress/')
            else:
                invalidID = True

    context_dict['alreadyRegistered'] = alreadyRegistered
    context_dict['invalidID'] = invalidID
    return render(request,
            'studentprogress/register.html', context_dict)

2 个答案:

答案 0 :(得分:1)

允许自定义用户名字段长度的一种方法是使用自定义用户模型。文档在这里:https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#specifying-a-custom-user-model

AbstractBaseUser扩展您的自定义用户模型,它提供了使用Django身份验证的必要方法。

基本上,您可以使用您需要的数据创建模型,并在模型中定义必需的字段。在您的情况下,您可能希望将USERNAME_FIELDEMAIL_FIELD设置为模型中的相同字段。

答案 1 :(得分:0)

Django 1.10附带了用于更改用户名max_length的迁移。您只需运行迁移,即python manage.py migrate auth即可更新数据库表。