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:  | 
