Django: локальная переменная 'form' упоминается до присвоения
В посте Правильный способ обработки нескольких форм на одной странице в Django я попытался создать несколько форм в одном шаблоне, так что когда я нажимаю только одну кнопку отправки, она не отправляет все формы сразу.
Я дал моим кнопкам отправки имя, например form1_btn для моей первой формы.
Прежде чем я смог попробовать, работает ли это, я получил следующую ошибку, хотя я указал в операторе Else, что происходит, когда request != 'POST
'.local variable 'form' referenced before assignment
Просмотр файлов
Вы определяете form внутри оператора else, а rendering форму вне try-except-else, поэтому экземпляр 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, ...})
Можно пройти через весь алгоритм, не называя созданную 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