Django save()方法的返回类型
我是一个尝试使用django创建注册表的初学者。这是我之前编写的register视图类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
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
模型的一个实例。谢谢,现在更清楚了。谢谢,我现在就知道了。谢谢,我现在就知道了。