Привет, ребята в 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')
Вам нужно поместить класс Текущий, а не родительский класс, в вызов super
:
user=super(MyRegistrationForm, self).save(commit=False)
То, как у вас это было, означало, что он пропускал родительский элемент и перешел прямо к дедушке и бабушке, то есть ModelForm, в которой нет настраиваемой логики set_password.
Однако обратите внимание, что, поскольку вы используете Python 3, вам вообще не нужны никакие параметры для super:
user=super().save(commit=False)
что бы избежать вашей проблемы.