diff options
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: |