在Django的大家好,我尝试制作一个简单的自定义用户创建表单,该表单随UserCreationForm扩展。一切正常,但是将记录保存到数据库后没有密码,我不知道为什么会这样。 请帮助我
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class MyRegistrationForm(UserCreationForm):
email=forms.EmailField(required=True)
first_name = forms.TextInput()
last_name = forms.TextInput()
class Meta:
model=User
fields=('username','email','first_name','last_name','password1','password2')
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
,在视图中,代码为:
def register_user_view(request):
if request.method == 'POST':
form=MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/success')
args={}
args.update(csrf(request))
args['form']=MyRegistrationForm().as_ul()
print(args)
return render_to_response('register.html',args)
def register_succesfull_view(request):
return render_to_response('registersucc.html')
答案 0 :(得分:1)
您需要在对super
的调用中放入 current 类,而不是父类:
user=super(MyRegistrationForm, self).save(commit=False)
您的使用方式意味着它跳过了父级,直接进入祖父母,即ModelForm,它没有自定义的set_password逻辑。
但是请注意,由于您使用的是Python 3,因此根本不需要任何参数即可进行超级操作:
user=super().save(commit=False)
这可以避免您的问题。