diff options
Diffstat (limited to 'ishtar_common/models_common.py')
| -rw-r--r-- | ishtar_common/models_common.py | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 00ff8babd..986ba209d 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -40,7 +40,7 @@ from django.urls import reverse, NoReverseMatch from django.core.validators import validate_slug from django.db import connection, transaction, OperationalError, IntegrityError from django.db.models import JSONField, Q, Count, Max -from django.db.models.signals import post_save, post_delete, m2m_changed +from django.db.models.signals import m2m_changed, post_save, post_delete, pre_delete from django.template import loader from django.template.defaultfilters import slugify from django.utils import timezone @@ -3110,6 +3110,8 @@ def geodata_attached_changed(sender, **kwargs): if not profile.mapping: return instance = kwargs.get("instance", None) + if getattr(instance, "__delete", False): + return model = kwargs.get("model", None) pk_set = kwargs.get("pk_set", None) @@ -3244,6 +3246,43 @@ class GeographicItem(models.Model): self._geodata_list = lst return lst + @property + def q_associated_source_geovectordata(self): + content_type = ContentType.objects.get_for_model(self.__class__) + return GeoVectorData.objects.filter(source_content_type=content_type, + source_id=self.pk) + + def get_deleted_data(self) -> dict: + """ + Return sub object list that will be deleted + :return: {"Sub object type": ["Sub object 1", "Sub object 2", ...]} + """ + if not self.q_associated_source_geovectordata.count(): + return {} + lbl = str(_("Geographic - Vector data")) + data = {lbl: []} + for geodata in self.q_associated_source_geovectordata.all(): + data[lbl].append(f"{self.__class__._meta.verbose_name} - {geodata}") + return data + + +def main_item_pre_delete(sender, **kwargs): + instance = kwargs.get("instance", None) + if not instance or not instance.pk: + return + instance.__delete = True + + +def geo_item_pre_delete(sender, **kwargs): + instance = kwargs.get("instance", None) + if not instance or not instance.pk: + return + instance.__delete = True + instance._post_save_geo_ok = True + instance._post_saved_geo = True + instance.geodata.clear() + instance.q_associated_source_geovectordata.delete() + class PermissionQuery(models.Model): model = models.ForeignKey(ContentType, related_name="permissions", |
