diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-09-29 18:05:08 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:23:18 +0100 |
commit | 4ab3725af5ba8f12d69cbc1702baa13e9773880e (patch) | |
tree | c47ea21f2c4be849406d1d1ae40b34b560424504 /ishtar_common/views.py | |
parent | 4f73df01dc3891266fe999e3ab2652f712f6680a (diff) | |
download | Ishtar-4ab3725af5ba8f12d69cbc1702baa13e9773880e.tar.bz2 Ishtar-4ab3725af5ba8f12d69cbc1702baa13e9773880e.zip |
Geodata: delete action
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index db05c74a1..8c443a378 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -2892,3 +2892,73 @@ class GeoCreateView(GeoFormMixin, CreateView): kwargs["geom_type"] = self.kwargs.get("geom_type") kwargs["user"] = self.request.user return kwargs + + +class GeoEditView(GeoFormMixin, UpdateView): + page_name = _("Geo item modification") + + def get_form_kwargs(self): + kwargs = super(GeoEditView, self).get_form_kwargs() + try: + geo = models.GeoVectorData.objects.get(pk=self.kwargs.get("pk")) + assert check_permission(self.request, "geo/edit", geo.pk) + except (AssertionError, models.GeoVectorData.DoesNotExist): + raise Http404() + initial = {} + + for k in ( + list(self.form_class.base_fields.keys()) + + models.GeoVectorData.RELATED_MODELS + ): + value = getattr(geo, k) + if hasattr(value, "all"): + value = ",".join([str(v.pk) for v in value.all().order_by("pk")]) + if hasattr(value, "pk"): + value = value.pk + initial[k] = value + + kwargs["main_items_fields"] = {} + kwargs["too_many"] = {} + LIMIT = 10 + for k in models.GeoVectorData.RELATED_MODELS: + kwargs["main_items_fields"][k] = [] + values = [] + for idx, related_item in enumerate(getattr(geo, k).all()): + if idx >= LIMIT: + if k not in kwargs["too_many"]: + kwargs["too_many"][k] = [] + kwargs["too_many"][k].append(related_item.pk) + continue + pk = str(related_item.pk) + values.append(pk) + key = "{}_{}_main_item".format(k, pk) + kwargs["main_items_fields"][k].append( + (key, "{} - {}".format(_("Main geo item for"), related_item)) + ) + if related_item.main_geodata == geo: + initial[key] = True + initial[k] = ",".join(values) + kwargs["initial"] = initial + kwargs["user"] = self.request.user + return kwargs + + +class GeoDeleteView(IshtarMixin, LoginRequiredMixin, DeleteView): + template_name = "ishtar/forms/geo_delete_form.html" + model = models.GeoVectorData + page_name = _("Delete geographic item") + + def get(self, request, *args, **kwargs): + self.back_url = request.GET.get("back_url", None) + return super().get(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context_data = super().get_context_data(**kwargs) + if self.back_url: + context_data["back_url"] = self.back_url + return context_data + + def get_success_url(self): + if self.request.POST.get("back_url", None): + return self.request.POST.get("back_url", None) + return reverse("start") |