如何解决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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。