Почему в 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.

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