[英]Django: local variable 'form' referenced before assignment
With the post Proper way to handle multiple forms on one page in Django I tried to create multiple forms in just one template, so when I press just one submit button, it doesn't submit all the forms right away.
我给提交按钮起了一个名字,例如我的第一个表单的 form1_btn。
在我什至可以尝试它是否有效之前,我收到以下错误,即使我在 Else 语句中指定了 request != 'POST 时会发生什么
local variable 'form' referenced before assignment
查看文件
@login_required
def DashboardView(request):
browser = str(request.user_agent.browser.family)
user = str(request.user)
short_user = user[0:7] + "..."
try:
radius = request.user.fieldradius
except FieldRadius.DoesNotExist:
radius = FieldRadius(user=request.user)
try:
font_size = request.user.fontsize
except FontSize.DoesNotExist:
font_size = FontSize(user=request.user)
try:
change_color = request.user.colors
except Colors.DoesNotExist:
change_color = Colors(user=request.user)
try:
toggle_settings = request.user.togglesettings
except ToggleSettings.DoesNotExist:
toggle_settings = ToggleSettings(user=request.user)
try:
page_details = request.user.pagedetails
except PageDetails.DoesNotExist:
page_details = PageDetails(user=request.user)
if request.method == 'POST':
if 'form1_btn' in request.POST:
form = FieldForm(request.POST, prefix='form1',
instance=Field(user=request.user))
if form.is_valid():
obj = form.save(commit=False)
obj.creator_adress = get_client_ip(request)
obj.save()
return redirect('/dashboard#5')
elif 'form2_btn' in request.POST:
togglesettings_form = ToggleSettingsForm(
request.POST, prefix='form2', instance=toggle_settings)
if togglesettings_form.is_valid():
togglesettings_form.save()
return redirect('/dashboard/#panel1')
elif 'form3_btn' in request.POST:
radius_form = FieldRadiusForm(
request.POST, prefix='form3', instance=radius)
if radius_form.is_valid():
radius_form.save()
return redirect('/dashboard')
elif 'form4_btn' in request.POST:
change_color_form = ColorsForm(
request.POST, prefix='form4', instance=change_color)
if change_color_form.is_valid():
change_color_form.save()
return redirect('/dashboard')
elif 'form5_btn' in request.POST:
pagedetails_form = PageDetailsForm(
request.POST, request.FILES, prefix='form5', instance=page_details)
if pagedetails_form.is_valid():
pagedetails_form.save()
return redirect('/dashboard')
elif 'form6_btn' in request.POST:
fontsize_form = FontSizeForm(
request.POST, prefix='form6', instance=font_size)
if fontsize_form.is_valid():
fontsize_form.save()
return redirect('/dashboard')
else:
form = FieldForm(prefix='form1')
togglesettings_form = ToggleSettingsForm(prefix='form2')
radius_form = FieldRadiusForm(prefix='form3', instance=radius)
change_color_form = ColorsForm(prefix='form4', instance=change_color)
pagedetails_form = PageDetailsForm(
prefix='form5', instance=page_details)
fontsize_form = FontSizeForm(prefix='form6', instance=font_size)
return render(request, 'dashboard.html', {'form': form, 'togglesettings_form': togglesettings_form, 'fontsize_form': fontsize_form, 'change_color_form': change_color_form, 'browser': browser, 'short_user': short_user, 'radius_form': radius_form, 'radius': radius, 'pagedetails_form': pagedetails_form})
``
您在else
语句中定义form
,并且在try-except-else
之外rendering
表单,因此找不到form
实例。 我认为您是在else
语句中呈现表单,所以只需在else
语句中返回即可。
else:
form = FieldForm(prefix='form1')
togglesettings_form = ToggleSettingsForm(prefix='form2')
radius_form = FieldRadiusForm(prefix='form3', instance=radius)
change_color_form = ColorsForm(prefix='form4', instance=change_color)
pagedetails_form = PageDetailsForm(
prefix='form5', instance=page_details)
fontsize_form = FontSizeForm(prefix='form6', instance=font_size)
return render(request, 'dashboard.html', {'form': form, 'togglesettings_form': togglesettings_form, 'fontsize_form': fontsize_form, 'change_color_form': change_color_form, 'browser': browser, 'short_user': short_user, 'radius_form': radius_form, 'radius': radius, 'pagedetails_form': pagedetails_form})
在return
行中,您引用form
:
return render(request, 'dashboard.html', {'form': form, ...})
可以通过所有算法 go 无需命名创建form
变量。 您可以将return
的tab
推到右侧,使其处于else
条件内。
else:
form = FieldForm(prefix='form1')
...
return render(request, 'dashboard.html', {'form': form, ...})
或者
只需删除else
条件。
@login_required
def DashboardView(request):
...
if request.method == 'POST':
...
form = FieldForm(prefix='form1')
...
return render(request, 'dashboard.html', {'form': form, ...})
您的最后一行似乎没有正确缩进:尝试在最后一行添加缩进级别,使其位于else
块内
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.