Django管理员登录表单-覆盖max_length失败

问题描述

|| 我正在尝试将我的管理员登录字段设置为大于30个字符,因为我使用的是自定义电子邮件身份验证后端,该后端实际上并不关心用户名字段的长度。 我想设置一个“ 0”应用程序,将更改应用到所有管理站点。
from django.contrib.auth.forms import AuthenticationForm
AuthenticationForm.base_fields[\'username\'].max_length = 150 # or whatever
它不起作用,我不明白为什么不这样做。 在...中的打印语句
django.contrib.admin.forms.AdminAuthenticationForm
django.contrib.auth.views.login
django.contrib.auth.views.login.form
#实例化形式 当我通过ѭ5渲染登录页面时,...显示正确的,修改后的数字。 甚至最终渲染功能中的表单实例也显示正确的数字。
# django.contrib.auth.views.login
...
print form.fields[\'username\'].max_length # this is an instantiated form!
return render_to_response(template_name,context ...)
我想念什么? 领域神奇地决定要长30个字符吗?我看不出有什么机会可以在我的打印声明和
render_to_response
之间进行更改。 如果我通过管理站点的子类
AuthenticationForm
,那么它可以工作。
class LongerAuthenticationForm(AuthenticationForm):
    username = forms.CharField(max_length=150)

class MyAdmin(AdminSite):
     login_form = LongerAuthenticationForm
这一切都让我感到困惑,因为我可以看到传递给最终渲染函数的表单实例具有正确的
CharField
max_length=150
。     

解决方法

        看来我需要直接修改小部件的attrs。 我忘了实例化字段一次!
CharField(max_length=30)
已经为HTML设置了窗口小部件属性。无论我如何更改字段实例上的
max_length
,都已经生成了小部件。 这是我的“ 0”应用中的解决方案。
from django.contrib.auth.forms import AuthenticationForm

AuthenticationForm.base_fields[\'username\'].max_length = 150 # I guess not needed
AuthenticationForm.base_fields[\'username\'].widget.attrs[\'maxlength\'] = 150 # html
AuthenticationForm.base_fields[\'username\'].validators[0].limit_value = 150
我真的不明白为什么实例化一个新的字段实例不起作用..?
AuthenticationForm.base_fields[\'username\'] = forms.CharField(max_length=100) 
    ,        在django 1.3中,您可以使用以下代码构建应用程序,并确保将其包含在设置中。它与已接受的解决方案非常相似,但是它是从AdminAuthenticationForm扩展而来的,否则您的非字段错误将不会显示。
from django.contrib.admin.forms import AdminAuthenticationForm
from django import forms
from django.contrib.admin.sites import AdminSite

class LongerAuthenticationForm(AdminAuthenticationForm):
    \"\"\" Subclass which extends the max length of the username field. \"\"\"
    username = forms.CharField(max_length=150)


AdminSite.login_form = LongerAuthenticationForm
    ,        从django.contrib.admin.forms导入AdminAuthenticationForm
class ModifiedForm(AdminAuthenticationForm):
    username = forms.CharField(max_length=150) #and so on
进入urls.py
from django.contrib import admin
admin.site.login_form = ModifiedForm

...

admin.autodiscover()
    

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...