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

Change username max_length in Django 1.11 (django.contrib.auth)

提问人:Hack-R 提问时间:6/8/2017 更新时间:10/17/2019 访问量:1915

问:

我的用户使用电子邮件地址作为用户名,这在 Django 1.9 中导致了一个问题,因为最大长度为 30 个字符。username

这应该由 Django 1.10 修复,我相信有 150 个字符的限制(尽管看起来文档实际上说某些数据库应该能够达到 191 个字符)。max_length

我升级到了 Django 1.11,但似乎仍然限制在 30 个字符以内。是因为我需要在某处设置值吗?如果是这样,我应该在哪里设置它(一个例子会很好)?如果没有,如何增加最大长度?usernamemax_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)
蟒蛇 Django

评论

1赞 Javier Campos 6/8/2017
AbstractUser 模型的 Override default django username validators 的可能重复项
0赞 Javier Campos 6/8/2017
我认为这是重复的,也许看看这里 stackoverflow.com/questions/29921900/......
0赞 Hack-R 6/8/2017
所以我必须创建一个新的用户模型,然后使用它并覆盖那里的长度?

答:

1赞 Pettis 6/8/2017 #1

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

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

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

0赞 Jeff 10/17/2019 #2

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