diff options
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 |
commit | 65431dd76a453aa106882669d8923d85adbd4573 (patch) | |
tree | b6235a3f1fbd8e158af8eca69ecda256ea9bf8ad /archaeological_finds/models_finds.py | |
parent | 7755e493f4f675d58e2520fda2b7775d4f4b25d5 (diff) | |
download | Ishtar-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.py | 22 |
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: |