Допустим, вам нужно выполнить две формы:
class ContactForm(forms.Form):
title = forms.CharField(max_length=150)
message = forms.CharField(max_length=200, widget=forms.TextInput)
class SubscriptionForm(forms.Form):
email = forms.EmailField()
Django FormView - это основной класс для обработки форм таким способом.Как минимум, ему необходимо:
Атрибут form_class, указывающий на класс, форму которого мы хотим обработать.
Атрибут success_url, чтобы указать, какой URL перенаправлять при успешной обработке формы.
Метод form_valid для выполнения фактической логики обработки.
Итак, в ваших представлениях:
class MultipleFormsDemoView(MultiFormsView):
template_name = "pages/cbv_multiple_forms.html"
form_classes = {'contact': ContactForm,
'subscription': SubscriptionForm,
}
success_urls = {
'contact': reverse_lazy('contact-form-redirect'),
'subscription': reverse_lazy('submission-form-redirect'),
}
def contact_form_valid(self, form):
'contact form processing goes in here'
def subscription_form_valid(self, form):
'subscription form processing goes in here'
В вашем шаблоне:
<form method="post">{% csrf_token %}
{{ forms.subscription }}
<input type="submit" value="Subscribe">
</form>
<form method="post">{% csrf_token %}
{{ forms.contact }}
<input type="submit" value="Send">
</form>
Вы также можете проверить встроенные формы