diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-06-08 12:10:44 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:21:01 +0100 |
commit | f4bbccb5214ff0dd2cbd7bc76973f64c06fc9509 (patch) | |
tree | fe6e7dbda13a8aef85247aba058b3231af890f96 /ishtar_common/forms_common.py | |
parent | fcdab311103db69b15589e07354a8e91aec64c67 (diff) | |
download | Ishtar-f4bbccb5214ff0dd2cbd7bc76973f64c06fc9509.tar.bz2 Ishtar-f4bbccb5214ff0dd2cbd7bc76973f64c06fc9509.zip |
Geodata - geoforms: manage large number of related items - fix zoom - better + button
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r-- | ishtar_common/forms_common.py | 13 |
1 files changed, 11 insertions, 2 deletions
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: |