2010-11-08 240 views
0

在django/django/contrib/auth/forms.py中如何覆盖默认方法 并在用户模块中包含相同内容?Django覆盖默认功能

所以我的打算是,我想改变用户名字段长度为64个字符,但因为每当新版本下载这个文件来改变这不会是正确的做到这一点在Django目录,....

究竟shoudl更改为做到这一点

class AuthenticationForm(forms.Form): 
""" 
Base class for authenticating users. Extend this to get a form that accepts 
username/password logins. 
""" 
username = forms.CharField(label=_("Username"), max_length=30) 
password = forms.CharField(label=_("Password"), widget=forms.PasswordInput) 
+0

究竟是你想重写什么?问题是什么? – 2010-11-08 13:30:06

+0

请参阅编辑 – Hulk 2010-11-08 13:31:13

+0

不要忘记从您的DBMS'ALTER'您的用户表架构。由于'auth_user'的usename字段长度为30个字符,而长度超过30个字符串的任何字符串都会导致数据库级别的错误。 – FallenAngel 2012-05-26 11:38:09

回答

0

如果我理解正确的话,您可以通过子类AuthenticationForm到如来改变它MyAuthenticationForm

class MyAuthenticationForm(AuthenticationForm): 
    username = forms.CharField(label=_("Username"), max_length=64) 

这样,你就保留的校验AuthenticationForm,但还是让用户名是64个字符长。

+0

这可以只为用户名字段?如果是这样,我可以覆盖User()模块的用户名也有64个字符。 – Hulk 2010-11-08 13:41:29

+0

@浩克:不,你基本上不能改变现有的模型,至少不容易。 – 2010-11-08 21:52:34

+0

K谢谢你现在我会在django中进行更改 – Hulk 2010-11-09 05:02:06

1

@Deniz多甘:你还必须说服登录查看使用自定义窗体:

login(request, authentication_form=MyAuthenticationForm)