#python #django #django-forms
#python #django #django-forms
Вопрос:
я использовал тот же код для форм в предыдущих приложениях, но на этот раз, похоже, он не работает, миграции были выполнены, и я занимался этим целый день и не могу найти хорошего решения, почему эта форма не работает.
def gst_form(request):
if request.method == 'POST':
form = gst_form(request.POST)
if form.is_valid():
form.save()
return redirect("/")
else:
return HttpResponse("Details Invalid")
else:
form = gst_form()
context= {'form':form}
return render(request, 'main/form.html', context)
Комментарии:
1. вы назвали свое представление так же, как и форму. Таким образом, вместо создания новой формы вы выполните рекурсивный вызов.
2. Пожалуйста, дайте вашему классу формы другое имя. Обычно это in
PerlCase
(notsnake_case
) .
Ответ №1:
Похоже, вы указали как свое представление, так и свою форму gst_form
в качестве имени. Таким образом, это означает, что при вызове gst_form
вашего представления вы выполняете рекурсивный вызов функции представления, поэтому вы не создаете форму.
Простой способ решить эту проблему — переименовать вашу форму, например, в GstForm
:
class GstForm(forms.ModelForm):
# …
тогда больше не будет столкновения имен:
from ….forms import GstForm
# …
def gst_form(request):
if request.method == 'POST':
form = GstForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
form = GstForm()
context= { 'form': form }
return render(request, 'main/form.html', context)
Кроме того, это также соответствует рекомендациям по стилю PEP-0008:
Имена классов обычно должны использовать
CapWords
соглашение.
Комментарии:
1. Большое спасибо, чувак, я занимаюсь этим багом уже больше часа.