summaryrefslogtreecommitdiff
path: root/archaeological_finds/models_finds.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2025-11-29 16:45:39 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-11-29 16:45:39 +0100
commit47ae57c37abfed75f93594255b6c617afa011bf5 (patch)
treec9172a07ceb24b67854009b0c3cad9e365affe7b /archaeological_finds/models_finds.py
parent713a5fd98aef4432977461dbf0b24790b9539053 (diff)
downloadIshtar-47ae57c37abfed75f93594255b6c617afa011bf5.tar.bz2
Ishtar-47ae57c37abfed75f93594255b6c617afa011bf5.zip
🐛 fix deletion of items with associated datations - better performance for deletion - delete directly associéted geovectordata
Diffstat (limited to 'archaeological_finds/models_finds.py')
-rw-r--r--archaeological_finds/models_finds.py22
1 files changed, 18 insertions, 4 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 5eed32772..56232165f 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -71,6 +71,8 @@ from ishtar_common.models import (
QuickAction,
SearchVectorConfig,
ValueGetter,
+ main_item_pre_delete,
+ geo_item_pre_delete
)
from ishtar_common.models_common import HistoricalRecords, SerializeItem, \
GeoVectorData, geodata_attached_changed
@@ -938,21 +940,23 @@ class BaseFind(
Return sub object list that will be deleted
:return: {"Sub object type": ["Sub object 1", "Sub object 2", ...]}
"""
+ data = super().get_deleted_data()
if self.find.count() != 1:
- return {}
+ return data
lbl = str(_("Finds"))
- data = {lbl: []}
+ data[lbl] = []
for item in self.find.all():
data[lbl].append(str(item))
return data
def post_save_basefind(sender, **kwargs):
+ instance = kwargs.get("instance", None)
+ if not instance or not instance.pk or getattr(instance, "__delete", False):
+ return
cached_label_changed(sender, **kwargs)
post_save_geo(sender, **kwargs)
instance = kwargs.get("instance", None)
- if not instance or not instance.pk:
- return
for f in instance.find.all():
cached_label_changed(Find, instance=f)
@@ -961,10 +965,12 @@ def pre_delete_basefind(sender, **kwargs):
instance = kwargs["instance"]
if not instance or not instance.pk:
return
+ geo_item_pre_delete(sender, **kwargs)
q = Find.objects.filter(base_finds__pk=instance.pk)
for find in q.all():
if find.base_finds.count() == 1: # only associated to the deleted base find
find.__base_find_deleted = True # prevent loop
+ find.__delete = True
find.delete()
@@ -3828,6 +3834,14 @@ def pre_clean_find(sender, **kwargs):
instance.upstream_treatment.delete()
+def pre_delete_find(sender, **kwargs):
+ instance = kwargs["instance"]
+ if not instance or not instance.pk:
+ return
+ main_item_pre_delete(sender, **kwargs)
+
+
+pre_delete.connect(pre_delete_find, sender=Find)
post_save.connect(cached_label_changed, sender=Find)
pre_delete.connect(pre_clean_find, sender=Find)