gpt4 book ai didi

python - 赋值前引用的局部变量 'form1'

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:31 24 4
gpt4 key购买 nike

enter image description here我想允许用户更新他们的个人资料信息,但我的问题是,当我提交表单时,它向我显示此错误,但我看不到错误在哪里!

@login_required
def update_profile(request):

if request.method == 'POST':
user_u = UpdateUser(request.POST)
profile_u = UpdateProfile(request.POST)

if user_u.is_valid() and profile_u.is_valid():
request.user.username = user_u.cleaned_data['username']
request.user.first_name = user_u.cleaned_data['first_name']
request.user.last_name = user_u.cleaned_data['last_name']
request.user.email = user_u.cleaned_data['email']
request.user.save()
prf = Profile.objects.get(user=request.user)
prf.Zip_code = profile_u.cleaned_data['Zip_code']
prf.Phone = profile_u.cleaned_data['Phone']
prf.save()
return redirect(reverse('profile'))

else:
data1 = {'username': request.user.username, 'email': request.user.email,
'first_name': request.user.first_name, 'last_name': request.user.last_name}
profile = Profile.objects.get(user=request.user)
data2 = {'Phone': profile.Phone, 'Zip_code': profile.Zip_code}
form1 = UpdateUser(initial=data1)
form2 = UpdateProfile(initial=data2)

return render(request, 'store/updateprofile.html', {'form1': form1, 'form2': form2})

最佳答案

我认为如果您在方法的整个范围内使用一致的变量名称可能会有所帮助。在 POST 情况下,您使用 user_uprofile_u,而在 GET 情况下(最后一个 else),您将使用 form1form2

因此,(至少)其中一个表单无效的 POST 请求将导致 render(..) 调用,但不会设置 form1form2

在您看来,您还做了很多通常由 ModelForm [Django-doc] 处理的事情。 ,因此我建议您调用 profile_u.save() (如果尚未完成,请将这些表单转换为 ModelForm)。

最后,您可以使用 instance=... 加载带有“初始值”的表单。

如果我们考虑这些变化,我们会得到以下 View :

@login_required
def update_profile(request):
prf = Profile.objects.get(user=request.user)
if request.method == 'POST':
user_u = UpdateUser(request.POST, instance=<b>request.user</b>)
profile_u = UpdateProfile(request.POST, instance=<b>prf</b>)

if user_u.is_valid() and profile_u.is_valid():
<b>user_u.save()</b>
<b>profile_u.save()</b>
return redirect(reverse('profile'))

else:
user_u = UpdateUser(<b>instance=request.user</b>)
profile_u = UpdateProfile(<b>instance=prf</b>)

return render(request, 'store/updateprofile.html', {'form1': user_u, 'form2': profile_u})

关于python - 赋值前引用的局部变量 'form1',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52592658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com