пользовательская форма создания пользователя не сохраняет пароль в Django - PullRequest
0 голосов
/ 27 октября 2018

Привет, ребята, в 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')

в базе данных

1 Ответ

0 голосов
/ 27 октября 2018

Вам нужно поместить текущий класс, а не родительский класс, в вызов super:

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

То, как вы это сделали, означало, что он пропускал родителя и переходил прямо к прародителю, то есть ModelForm, у которого нет пользовательской логики set_password.

Обратите внимание, что поскольку вы используете Python 3, вам вообще не нужны никакие параметры для super:

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

, который бы избежал вашей проблемы.

...