From 47ae57c37abfed75f93594255b6c617afa011bf5 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Sat, 29 Nov 2025 16:45:39 +0100 Subject: 🐛 fix deletion of items with associated datations - better performance for deletion - delete directly associéted geovectordata MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- archaeological_finds/models_finds.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'archaeological_finds/models_finds.py') 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) -- cgit v1.2.3