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

Вернуться на верх