在ModelForm中用Django User模型覆盖用户名的maxlength / minlength

时间:2016-12-24 14:57:39

标签: django django-forms modelform

尝试通过以下代码覆盖用户模型,但不知怎的,我无法覆盖用户名的max_length和min_length。

更具体地说,当我通过python manage.py shell检查时,我会覆盖它们。但它似乎对渲染的html没有影响(用户名maxlength仍然是150)。

不知道哪些部分出错了,请帮忙。

from django import forms
from django.contrib.auth.models import User

class RegistrationForm(forms.ModelForm):

def __init__(self, *args, **kwargs):
    super(RegistrationForm, self).__init__(*args, **kwargs)
    email = self.fields['email']
    username = self.fields['username']
    email.required = True
    email.label_suffix = ' '
    username.label_suffix = ' '
    ######### this is not work!!!###############
    username.min_length = 6
    username.max_length = 30
    ############################################

class Meta:
    model = User
    fields = ('username', 'email')
    labels = {
        'username': '帳號',
    }
    help_texts = {
        'username': '',
    }

2 个答案:

答案 0 :(得分:1)

您应修改/覆盖模型,而不是修改表单。

我建议使用django-auth-tools来构建您自己的自定义用户模型。它提供了可以轻松扩展的基本模型,视图和表格。

答案 1 :(得分:1)

如果您试图仅覆盖模型表单字段,则可以执行类似这样的操作

class RegistrationForm(forms.ModelForm):
    username = forms.CharField(required=True, min_length=6, max_length=30)

class Meta:
        model = User
        fields = ('username', 'email')

class RegistrationForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(RegistrationForm, self).__init__(*args, **kwargs)
        self.fields['username'] = forms.CharField(required=True, min_length=6, max_length=30)

class Meta:
        model = User
        fields = ('username', 'email')

但我建议创建一个继承自AbstractBaseUser的自定义用户模型,以覆盖https://docs.djangoproject.com/en/1.10/topics/auth/customizing/

中记录的用户名或电子邮件字段