From f4bbccb5214ff0dd2cbd7bc76973f64c06fc9509 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 8 Jun 2022 12:10:44 +0200 Subject: Geodata - geoforms: manage large number of related items - fix zoom - better + button --- ishtar_common/forms_common.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'ishtar_common/forms_common.py') diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index b6a36ff03..856381d05 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -2649,6 +2649,9 @@ class GISForm(forms.ModelForm, CustomForm, ManageOldType): main_items_fields = {} if "main_items_fields" in kwargs: main_items_fields = kwargs.pop("main_items_fields") + self.too_many = {} + if "too_many" in kwargs: + self.too_many = kwargs.pop("too_many") self.user = None self.geom_type = kwargs.pop("geom_type") \ if kwargs.get("geom_type", None) else None @@ -2743,7 +2746,7 @@ class GISForm(forms.ModelForm, CustomForm, ManageOldType): # geo keys for an instanced item geo_keys = [] for keys in self.GEO_FIELDS: - if any(getattr(instance, key) for key in keys): + if any(key for key in keys if getattr(instance, key) is not None): if keys[0] != "x": geom = getattr(instance, keys[0]) map_srid = geom.srid or 4326 @@ -2800,13 +2803,19 @@ class GISForm(forms.ModelForm, CustomForm, ManageOldType): ) def save(self, commit=True): + if not getattr(self.instance, "source_content_type", None): + self.instance.source_content_type_id = self.source_content_type + self.instance.source_id = self.source_id item = super().save(commit=commit) for related_key in models.GeoVectorData.RELATED_MODELS: related = getattr(item, related_key) initial = dict([(rel.pk, rel) for rel in related.all()]) new = [int(pk) for pk in sorted(self.cleaned_data.get(related_key, []))] + full_new = new[:] + if related_key in self.too_many: + full_new += self.too_many[related_key] for pk, value in initial.items(): - if pk in new: + if pk in full_new: continue related.remove(value) for new_pk in new: -- cgit v1.2.3