Yuj*_*ita 3 django django-admin
我正在尝试将管理员登录字段设置为大于30个字符,因为我使用的是自定义电子邮件身份验证后端,并不关心用户名字段的长度.
我想设置一个monkey_patch应用程序,将更改应用于所有管理站点.
from django.contrib.auth.forms import AuthenticationForm
AuthenticationForm.base_fields['username'].max_length = 150 # or whatever
Run Code Online (Sandbox Code Playgroud)
它不起作用,我不明白为什么不.
......中的印刷声明
django.contrib.admin.forms.AdminAuthenticationFormdjango.contrib.auth.views.logindjango.contrib.auth.views.login.form #instantiated form...当我通过渲染登录页面时显示正确的修改数字/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 ...)
Run Code Online (Sandbox Code Playgroud)
该领域神奇地决定是30个字符长?我没有看到它有机会在我的print语句和render_to_response.
如果我将管理站点传递给子类AuthenticationForm,则可以正常工作.
class LongerAuthenticationForm(AuthenticationForm):
username = forms.CharField(max_length=150)
class MyAdmin(AdminSite):
login_form = LongerAuthenticationForm
Run Code Online (Sandbox Code Playgroud)
这对我来说很困惑,因为我可以看到传递给最终渲染函数的表单实例具有正确CharField的max_length=150.
看起来我需要直接修改小部件attrs.
我忘记了字段被实例化了一次!
CharField(max_length=30)已经在为HTML设置窗口小部件属性.无论我如何更改max_length字段实例,都已生成窗口小部件.
这是我的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
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么实例化一个新的字段实例不起作用..?
AuthenticationForm.base_fields['username'] = forms.CharField(max_length=100)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2019 次 |
| 最近记录: |