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