Почему в Django метод post считает пустую форму и возвращает код 200?
Когда отправляется пустая форма. Вместо того чтобы пропустить условия и вывести ту же форму. Вместо этого возвращается пустая форма и выдается код 200
class ContactView(View):
def get(self, request):
form = ContactModelForm()
return render(request, 'contact/contact_us.html', {'forms': form})
def post(self, request):
if request.method == 'POST':
form = ContactModelForm(request.POST)
if form.is_valid():
form.save()
return redirect('home')
form = ContactModelForm()
return render(request, 'contact/contact_us.html', {'forms': form})
Вы должны построить новую форму только в случае GET, поэтому:
class ContactView(View):
def get(self, request):
form = ContactModelForm()
return render(request, 'contact/contact_us.html', {'forms': form})
def post(self, request):
form = ContactModelForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('home')
# form = ContactModelForm()
return render(request, 'contact/contact_us.html', {'forms': form})
Вы также можете улучшить вид, работая с CreateView
в этом случае:
from django.urls import reverse_lazy
from django.views.generic import CreateView
class ContactView(CreateView):
template_name = 'contact/contact_us.html'
form_class = ContactModelForm
success_urls = reverse_lazy('home')
Это передаст форму в шаблон как form
, а не как .forms
Note: While most forms do not process media files, it is probably better to pass
request.FILES
[Django-doc] to the form anyway, such that if you later add an extra media field, all views that use the form will indeed handle the files properly.