Django管理员登录表单 – 覆盖max_length失败
我正在尝试将管理员登录字段设置为大于30个字符,因为我使用的是自定义电子邮件身份验证后端,并不关心用户名字段的长度.
我想设置一个monkey_patch应用程序,将应用程序更改到所有管理站点. from django.contrib.auth.forms import AuthenticationForm AuthenticationForm.base_fields['username'].max_length = 150 # or whatever 它不起作用,我不明白为什么不. ……中的印刷声明 > django.contrib.admin.forms.AdminAuthenticationForm …当我通过/ myadmin / anywhere /呈现登录页面时,显示正确的修改数字. 即使最终渲染函数中的表单实例也显示正确的数字. # django.contrib.auth.views.login ... print form.fields['username'].max_length # this is an instantiated form! return render_to_response(template_name,context ...) 我错过了什么? 该领域神奇地决定是30个字符长?我没有看到它有机会在我的print语句和render_to_response之间进行更改. 如果我通过管理站点传递子类AuthenticationForm,它的工作原理. class LongerAuthenticationForm(AuthenticationForm): username = forms.CharField(max_length=150) class MyAdmin(AdminSite): login_form = LongerAuthenticationForm 这对我来说很困惑,因为我可以看到传递给最终渲染函数的表单实例具有正确的CharField,其max_length = 150. 解决方法
看起来我需要直接修改小部件attrs.
我忘记了字段被实例化了一次! 这是我在monkey_patch应用程序中的解决方案. 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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |