尝试通过以下代码覆盖用户模型,但不知怎的,我无法覆盖用户名的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': '',
}
答案 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/
中记录的用户名或电子邮件字段