我的用户使用电子邮件地址作为用户名,这导致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)
答案 0 :(得分:1)
允许自定义用户名字段长度的一种方法是使用自定义用户模型。文档在这里:https://docs.djangoproject.com/en/1.11/topics/auth/customizing/#specifying-a-custom-user-model
从AbstractBaseUser扩展您的自定义用户模型,它提供了使用Django身份验证的必要方法。
基本上,您可以使用您需要的数据创建模型,并在模型中定义必需的字段。在您的情况下,您可能希望将USERNAME_FIELD和EMAIL_FIELD设置为模型中的相同字段。
答案 1 :(得分:0)
Django 1.10附带了用于更改用户名max_length的迁移。您只需运行迁移,即python manage.py migrate auth
即可更新数据库表。