Source code for atom.ext.crispy_forms.views
from __future__ import absolute_import
from django.contrib import messages
from django.forms.models import inlineformset_factory
from django.http import HttpResponseRedirect
from django.utils.translation import ugettext as _
from .forms import BaseTableFormSet
[docs]class FormSetMixin(object):
inline_model = None
inline_form_cls = None
formset_cls = BaseTableFormSet
formset = None # precomputed by default
[docs] def get_formset(self):
return self.formset or inlineformset_factory(self.model, self.inline_model,
form=self.inline_form_cls,
formset=self.formset_cls)
[docs] def get_context_data(self, **kwargs):
context = super(FormSetMixin, self).get_context_data(**kwargs)
context.update({'formset': self.get_formset()(instance=self.get_instance())})
return context
[docs] def get_form(self, *args, **kwargs):
form = super(FormSetMixin, self).get_form(*args, **kwargs)
if hasattr(form, 'helper'):
form.helper.form_tag = False
return form
[docs] def formset_valid(self, form, formset):
formset.save()
messages.success(self.request, self.get_formset_valid_message())
return HttpResponseRedirect(self.get_success_url())
[docs] def formset_invalid(self, form, formset):
return self.render_to_response(self.get_context_data(form=form, formset=formset))
[docs] def form_valid(self, form):
self.object = form.save(commit=False)
FormSet = self.get_formset()
formset = FormSet(self.request.POST or None,
self.request.FILES,
instance=self.object,
**self.get_formset_kwargs())
if formset.is_valid():
self.object.save()
return self.formset_valid(form, formset)
else:
return self.formset_invalid(form, formset)