我一直在尝试扩展默认设置UserCreationForm
以包括电子邮件、名字和姓氏。这似乎是关于 SO 的一个很常见的话题,但是我得到的逻辑错误我仍然没有找到解决方案。
这是我的代码:
表格.py
class RegistrationForm(UserCreationForm):
first_name = forms.CharField(required=True, label="First name:", max_length=100)
last_name = forms.CharField(required=True, label="Last name:", max_length=100)
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'username', 'password1', 'password2')
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
if commit:
user.save()
return user
视图.py
def register_user(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
return redirect('/reg_interests/')
args = {}
args['form'] = RegistrationForm()
return render(request, 'login/registration.html', args)
视图和表单在技术上是有效的,因为我没有看到错误消息,但是user.save()
名字和姓氏不会保存到数据库中(但电子邮件是)。
我知道每个email
,first_name
和last_name
是默认 Django User 对象中存在的字段,因此不存在的字段不是问题。
为什么扩展email
会保存到数据库但first_name
不会last_name
?
注意:我使用的是新发布的 Django 1.10,所以我不知道这是否与它有关。