diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2021-07-09 19:20:12 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-07-08 09:58:47 +0200 |
commit | c3d97de7bdec3f7899340c606f46276836eb2a8b (patch) | |
tree | f65f72441311e7378b90674a31e3109034aca890 /archaeological_files/views.py | |
parent | 3142d9d08e88dfd58a02a10821bfd26b49a35f79 (diff) | |
download | Ishtar-c3d97de7bdec3f7899340c606f46276836eb2a8b.tar.bz2 Ishtar-c3d97de7bdec3f7899340c606f46276836eb2a8b.zip |
Preventive file: work on inlines
Diffstat (limited to 'archaeological_files/views.py')
-rw-r--r-- | archaeological_files/views.py | 64 |
1 files changed, 49 insertions, 15 deletions
diff --git a/archaeological_files/views.py b/archaeological_files/views.py index 366ef3754..90d41c68b 100644 --- a/archaeological_files/views.py +++ b/archaeological_files/views.py @@ -23,6 +23,7 @@ import re from django.core.urlresolvers import reverse from django.db.models import Q from django.http import HttpResponse, Http404, HttpResponseRedirect +from django.forms.formsets import formset_factory from django.views.generic.edit import UpdateView from django.shortcuts import redirect, render from ishtar_common.utils import ugettext_lazy as _ @@ -361,37 +362,41 @@ def reset_wizards(request): class MixFormFormsetUpdateView(UpdateView): form_inlines_class = [] + def get_form_inlines_class(self): + return self.form_inlines_class + def get(self, request, *args, **kwargs): self.object = self.get_object() self.inline_forms = [ inline(instance=self.object, prefix=getattr(inline, "form_slug", "form")) - for inline in self.form_inlines_class + for inline in self.get_form_inlines_class() ] return super(MixFormFormsetUpdateView, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): self.object = self.get_object() - attrs = {"instance": self.object} form = self.form_class(data=request.POST, instance=self.object) - inline_forms = [ + self.inline_forms = [ inline(instance=self.object, data=request.POST, prefix=getattr(inline, "form_slug", "form")) - for inline in self.form_inlines_class + for inline in self.get_form_inlines_class() ] - if form.is_valid() and all((inline.is_valid() for inline in inline_forms)): - return self.form_valid(form, inline_forms) + if form.is_valid() and all((inline.is_valid() for inline in self.inline_forms)): + return self.form_valid(form, self.inline_forms) else: - return self.form_invalid(form, inline_forms) + return self.form_invalid(form, self.inline_forms) def form_valid(self, form, inline_forms): self.object = form.save() + print("OK") for inline in inline_forms: - # save inlines... + inline.save() pass return HttpResponseRedirect(self.get_success_url()) def form_invalid(self, form, inline_forms): + print("NOP") return self.render_to_response( self.get_context_data(form=form, inlines=inline_forms) ) @@ -405,15 +410,35 @@ class MixFormFormsetUpdateView(UpdateView): class PreventiveEditView(IshtarMixin, LoginRequiredMixin, MixFormFormsetUpdateView): page_name = _("Preventive modification") form_class = forms.FileFormPreventiveDetail - form_inlines_class = [ - forms.PreventiveFileJobFormSet, - forms.PreventiveFileGroundJobFormSet, - forms.PreventiveFileEquipmentFormSet, - forms.PreventiveFileTechnicalServiceFormSet - ] template_name = "ishtar/forms/preventive_detail.html" model = models.File + def get_form_inlines_class(self): + inlines = [ + forms.PreventiveFileGroundJobFormSet, + forms.PreventiveFileJobFormSet, + ] + self.inline_types = list( + models.GenericEquipmentServiceType.objects.filter(available=True).all()) + + for inline_type in self.inline_types: + form_class_name = "".join([ + t.capitalize() + for t in inline_type.txt_idx.replace( + '-', ' ').replace('_', ' ').split(" ")]) + "Formset" + form = type(form_class_name, + (forms.PreventiveFileEquipmentServiceForm,), + {"type_filter": inline_type.txt_idx}) + formset = formset_factory( + form, formset=forms.PreventiveFileEquipmentServiceBaseFormSet, + can_delete=True + ) + formset.form_label = str(inline_type) + formset.form_slug = inline_type.txt_idx + formset.dynamic_add = True + inlines.append(formset) + return inlines + def get_success_url(self): return reverse("file_modification") + "?open_item={}".format(self.object.pk) @@ -438,4 +463,13 @@ class PreventiveEditView(IshtarMixin, LoginRequiredMixin, MixFormFormsetUpdateVi kwargs["initial"] = initial kwargs["user"] = self.request.user self.file = file - return kwargs
\ No newline at end of file + return kwargs + + def get_context_data(self, **kwargs): + context = super(PreventiveEditView, self).get_context_data(**kwargs) + unities = {} + for inline_formset in context["inline_forms"]: + if inline_formset.forms and hasattr(inline_formset.forms[0], "unities"): + unities.update(inline_formset.forms[0].unities) + context["form_unities"] = unities.items() + return context |