Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django save()方法的返回类型_Django_Forms_Save - Fatal编程技术网

Django save()方法的返回类型

Django save()方法的返回类型,django,forms,save,Django,Forms,Save,我是一个尝试使用django创建注册表的初学者。这是我之前编写的register视图类 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_val

我是一个尝试使用django创建注册表的初学者。这是我之前编写的register视图类

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})
代码给出的错误是,我的用户表单对象没有set\u password()方法。 然后,我通过将“user_表单”保存到另一个名为“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})
print语句的输出给出了以下结果

<class 'basic_app.forms.UserRegistrationForm'>     <class 'django.contrib.auth.models.User'>

我不明白当两者都是同一形式的实例时,它们的类型为何不同。还有为什么第一个代码不起作用,而第二个代码起作用


这是我的第一个问题。谢谢。

不会返回
ModelForm
的实例。它返回由
ModelForm
创建/更新的
Model
的实例不返回
ModelForm
的实例。它返回由
ModelForm

创建/更新的
Model
实例。“我不明白当两者都是同一表单的实例时,它们的类型为何不同。”
user\u form
UserRegistrationForm
的实例。然而,如果您执行
user=user\u form.save()
,则
user
变量将被分配
save()
方法返回的值,该方法恰好是
user
模型的一个实例。谢谢,现在更清楚了。“我不明白当两者都是同一表单的实例时,它们的类型为何不同。”
user\u form
UserRegistrationForm
的一个实例。然而,如果执行
user=user\u form.save()
,则
user
变量将被分配
save()
方法返回的值,该方法恰好是
user
模型的一个实例。谢谢,现在更清楚了。谢谢,我现在就知道了。谢谢,我现在就知道了。