【问题标题】:Django override default functionalitiesDjango 覆盖默认功能
【发布时间】:2010-11-08 13:29:01
【问题描述】:

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

所以我的意图是我想将用户名字段长度更改为 64 个字符,但是在 django 目录中这样做是不正确的,因为每当下载新版本时,这个文件都必须更改......

究竟应该改变什么来做到这一点

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)

【问题讨论】:

  • 您到底想覆盖什么?有什么问题?
  • 不要忘记ALTER DBMS 中的用户表模式。因为auth_userusename字段是30个字符长,任何超过30的字符串都会导致数据库级错误。

标签: python django django-models django-views


【解决方案1】:

@Deniz Dogan:您还必须说服登录视图使用自定义表单:

login(request, authentication_form=MyAuthenticationForm)

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以通过将AuthenticationForm 子类化为例如MyAuthenticationForm:

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

    这样,您将保留来自AuthenticationForm 的验证器,但仍让用户名长度为 64 个字符。

    【讨论】:

    • 只能对用户名字段执行此操作吗?如果是这样,我可以覆盖 User() 模块用户名也有 64 个字符。
    • @Hulk:不,你基本上不能像那样改变现有的模型,至少不容易。
    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2017-04-26
    • 2014-01-05
    相关资源
    最近更新 更多