自定义用户创建表单主体将密码保存在Django中

时间:2018-10-27 11:03:57

标签: django python-3.x django-forms

在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')

in database

1 个答案:

答案 0 :(得分:1)

您需要在对super的调用中放入 current 类,而不是父类:

user=super(MyRegistrationForm, self).save(commit=False)

您的使用方式意味着它跳过了父级,直接进入祖父母,即ModelForm,它没有自定义的set_password逻辑。

但是请注意,由于您使用的是Python 3,因此根本不需要任何参数即可进行超级操作:

user=super().save(commit=False)

这可以避免您的问题。