Тип возврата метода save () - PullRequest
0 голосов
/ 17 ноября 2018

Я новичок, пытающийся создать регистрационные формы, используя 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.Спасибо.

1 Ответ

0 голосов
/ 17 ноября 2018

ModelForm.save() не возвращает экземпляр ModelForm. Он возвращает экземпляр Model, который был создан / обновлен ModelForm.

...