[Django]-Django multiple forms with formsets

8👍

✅

https://docs.djangoproject.com/en/dev/ref/forms/models/#django.forms.models.inlineformset_factory

from django.core.urlresolvers import reverse
from django.forms.models import inlineformset_factory

TimingFormSet = inlineformset_factory(HospitalDoctor, Timing, form=TimingForm, extra=7)

class HospitalDoctorAddView(CreateView):
   ...

    def get_context_data(self, **kwargs):
        context = super(HospitalDoctorAddView, self).get_context_data(**kwargs)
        context['formset'] = TimingFormSet(instance=Timing())

        return context

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        formset = TimingFormSet(request.POST, request.FILES)  # request.FILES for files, remove if don't send files

        if form.is_valid() and formset.is_valid():
            return self.form_valid(form, formset)
        else:
            return self.form_invalid(form, formset)

    def form_valid(self, form, formset):
        self.object = form.save()
        formset.instance = self.object
        formset.save()

        return HttpResponseRedirect(self.get_success_url())

    def form_invalid(self, form, formset):
        return self.render_to_response(
            self.get_context_data(
                form=form,
                formset=formset
            )
        )

    def get_success_url(self):
        return reverse('some_app:url_name')

Leave a comment