社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

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

user253489 • 6 年前 • 1687 次点击  

你好,在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
 
1687 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Daniel Roseman
Reply   •   1 楼
Daniel Roseman    6 年前

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

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

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

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

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

这可以避免你的问题。