Py学习  »  Django

自定义用户创建窗体Dosent在Django中保存密码

user253489 • 4 年前 • 814 次点击  

你好,在Django的伙计们,我试着做一个简单的自定义用户创建表单扩展为用户创建表单。一切正常,但在数据库中保存记录后没有密码,我不知道为什么会发生。 帮帮我plz

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38413
 
814 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Daniel Roseman
Reply   •   1 楼
Daniel Roseman    5 年前

你需要把 现在的 调用中的类,而不是父类 super :

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

您的方式意味着它将跳过父级并直接转到祖辈(即modelform),后者没有自定义的设置密码逻辑。

请注意,尽管您使用的是python 3,但您根本不需要任何参数来超级:

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

这可以避免你的问题。