【问题标题】:custom user creation form dosent save password in django自定义用户创建表单不会在 django 中保存密码
【发布时间】:2019-03-31 22:53:28
【问题描述】:

你好 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

【问题讨论】:

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


    【解决方案1】:

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

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

    您拥有它的方式意味着它正在跳过父级并直接进入祖父级,即 ModelForm,它没有自定义 set_password 逻辑。

    请注意,由于您使用的是 Python 3,因此根本不需要任何参数来超级:

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

    这可以避免你的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 2019-12-09
      • 2020-04-14
      • 2020-12-06
      • 1970-01-01
      • 2014-08-11
      • 2017-06-17
      相关资源
      最近更新 更多