summaryrefslogtreecommitdiff
path: root/archaeological_finds/models_finds.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-05-03 12:27:23 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-05-03 16:49:12 +0200
commit65431dd76a453aa106882669d8923d85adbd4573 (patch)
treeb6235a3f1fbd8e158af8eca69ecda256ea9bf8ad /archaeological_finds/models_finds.py
parent7755e493f4f675d58e2520fda2b7775d4f4b25d5 (diff)
downloadIshtar-65431dd76a453aa106882669d8923d85adbd4573.tar.bz2
Ishtar-65431dd76a453aa106882669d8923d85adbd4573.zip
🐛 when base finds are deleted, delete the associated finds if not other base find is associated (refs #3871)
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 aea0f51b4..5f2c9c8d8 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -868,7 +868,19 @@ def post_save_basefind(sender, **kwargs):
post_save_geo(sender, **kwargs)
+def pre_delete_basefind(sender, **kwargs):
+ instance = kwargs["instance"]
+ if not instance or not instance.pk:
+ return
+ 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()
+
+
post_save.connect(post_save_basefind, sender=BaseFind)
+pre_delete.connect(pre_delete_basefind, sender=BaseFind)
m2m_changed.connect(geodata_attached_changed, sender=BaseFind.geodata.through)
@@ -3470,10 +3482,12 @@ def pre_clean_find(sender, **kwargs):
return
instance = kwargs.get("instance")
- for bf in instance.base_finds.all():
- # no other find is associated
- if not bf.find.exclude(pk=instance.pk).count():
- bf.delete()
+ if not getattr(instance, "__base_find_deleted", False):
+ # prevent loop
+ for bf in instance.base_finds.all():
+ # no other find is associated
+ if not bf.find.exclude(pk=instance.pk).count():
+ bf.delete()
try:
if instance.downstream_treatment: