Я новичок, пытающийся создать регистрационные формы, используя django.Вот класс просмотра регистра, который я написал ранее.
def register(request):
registered= False
if request.method=="POST":
user_form= UserRegistrationForm(data=request.POST)
profile_form= UserProfileInfoForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
user_form.set_password(user_form.password)
user_form.save()
profile_form.save(commit=False)
profile_form.user=user_form
if 'profile_pic' in request.FILES:
profile_form.profile_pic=request.FILES('profile_pic')
profile_form.save()
registered=True
else:
print(user_form.errors,profile_form.errors)
else:
user_form=UserRegistrationForm()
profile_form=UserProfileInfoForm()
return render(request,'basic_app/register.html',
{'user_form':user_form,
'profile_form':profile_form,
'registered':registered})
Код выдает ошибку, что у моего объекта user_form нет метода set_password ().Затем я изменил свой код, сохранив «user_form» в другой экземпляр с именем «user».Вот мой новый код.Я добавил дополнительную функцию печати, чтобы проверить тип двух объектов.
def register(request):
registered=False
if request.method=="POST":
user_form=UserForm(data=request.POST)
profile_form=UserProfileInfoForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user=user_form.save()
print(type(user_form)," ",type(user))
user.set_password(user.password)
user.save()
profile=profile_form.save(commit=False)
profile.user=user
if 'profile_pic' in request.FILES:
profile.profile_pic=request.FILES['profile_pic']
profile.save()
registered=True
else:
print(user_form.errors,profile_form.errors)
else:
user_form=UserForm()
profile_form=UserProfileInfoForm()
return render(request,'basic_app/register.html',
{'user_form':user_form,
'profile_form':profile_form,
'registered':registered})
Вывод для оператора печати дал это
<class 'basic_app.forms.UserRegistrationForm'> <class 'django.contrib.auth.models.User'>
Я не понимаю, почему их типотличается, когда оба экземпляра имеют одинаковую форму.Кроме того, почему первый код не работал, когда второй работал.
Это мой первый вопрос о SO.Спасибо.