Arm*_*enB 7 forms django django-registration
我希望我的用户注册页面显示电子邮件和密码字段,而不是用户名.我创建了这个注册表:
class RegisterForm(UserCreationForm):
email = forms.EmailField(label = "Email")
#fullname = forms.CharField(label = "First name")
class Meta:
model = User
fields = ("email", )
def save(self, commit=True):
user = super(RegisterForm, self).save(commit=False
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user
Run Code Online (Sandbox Code Playgroud)
但用户名仍然显示.我需要覆盖其他内容吗?
小智 8
您可以从表单的字段中弹出用户名,如下所示:
class RegisterForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super(RegisterForm, self).__init__(*args, **kwargs)
# remove username
self.fields.pop('username')
...
Run Code Online (Sandbox Code Playgroud)
但是之后你需要在保存之前填写一些随机用户名:
from random import choice
from string import letters
...
class RegisterForm(UserCreationForm):
...
def save(self):
random = ''.join([choice(letters) for i in xrange(30)])
self.instance.username = random
return super(RegisterForm, self).save()
Run Code Online (Sandbox Code Playgroud)
当您以这种方式破解它时还需要考虑其他因素,例如确保您的LoginForm稍后在需要时提取用户名:
class LoginForm(AuthenticationForm):
email = forms.EmailField(label=_("E-mail"), max_length=75)
def __init__(self, *args, **kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
self.fields['email'].required = True
# remove username
self.fields.pop('username')
def clean(self):
user = User.objects.get(email=self.cleaned_data.get('email'))
self.cleaned_data['username'] = user.username
return super(LoginForm, self).clean()
Run Code Online (Sandbox Code Playgroud)
将该字段添加到 Meta 类的排除中:
class RegisterForm(UserCreationForm):
email = forms.EmailField(label = "Email")
#fullname = forms.CharField(label = "First name")
class Meta:
model = User
exclude = ['username',]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4377 次 |
最近记录: |