我正在尝试从基类UserCreationForm创建在django中添加电子邮件字段的注册表单。代码为
form.py
class ussignup(UserCreationForm):
email=forms.EmailField(required=True)
first_name=forms.CharField(required=False)
last_name=forms.CharField(required=False)
class Meta:
model=User
fields=('username','password1','password2','first_name','last_name','email',)
#fields=('username','password','first_name','last_name','email')
def save(self, commit=True):
user = super(UserCreationForm, 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
view.py
def signup(request):
if request.method=='POST':
form=ussignup(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/rgsuc')
args={}
args.update(csrf(request))
args['form']=form
return render_to_response('register.html',args)
urls.py
url(r'^accounts/signup',signup),
错误
输出显示表单但是在字段中输入的密码不保存在数据库中。因此,当从管理员查看时显示no password
,因此无法登录。
答案 0 :(得分:0)
好吧我终于明白了,我需要添加
user.set_password(self.cleaned_data["password1"])
我以为它会被django本身保存但是我已经覆盖了保存功能,因此需要保存它
答案 1 :(得分:0)
否则你只能在方法中改变它(即你的类名ussignup
,而不是基类UserCreationForm
),并且它会起作用。
def save(self, commit=True):
user = super(ussignup, 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
希望这会有所帮助。