diff options
| -rw-r--r-- | archaeological_finds/models_finds.py | 10 | ||||
| -rw-r--r-- | archaeological_finds/tests.py | 14 | 
2 files changed, 22 insertions, 2 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index bc96ded25..66059079b 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -1103,10 +1103,16 @@ class Find(ValueGetter, BaseHistorizedItem, ImageModel, OwnPerms,          Dating.fix_dating_association(self) -def pre_clean_treatments(sender, **kwargs): +def pre_clean_find(sender, **kwargs):      if not kwargs.get('instance'):          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 instance.downstream_treatment:          # TODO: not managed for now. Raise an error?          return @@ -1118,7 +1124,7 @@ def pre_clean_treatments(sender, **kwargs):  post_save.connect(cached_label_changed, sender=Find) -pre_delete.connect(pre_clean_treatments, sender=Find) +pre_delete.connect(pre_clean_find, sender=Find)  def base_find_find_changed(sender, **kwargs): diff --git a/archaeological_finds/tests.py b/archaeological_finds/tests.py index 933b5f292..b4a798807 100644 --- a/archaeological_finds/tests.py +++ b/archaeological_finds/tests.py @@ -412,6 +412,20 @@ class FindTest(FindInit, TestCase):          self.assertEqual(response.status_code, 200)          self.assertIn('class="sheet"', response.content) +    def test_delete(self): +        self.create_finds(force=True) +        first_bf = self.base_finds[0] +        self.finds[1].base_finds.add(first_bf) + +        self.finds[0].delete() +        # on delete the selected base find is not deleted if another find +        # is related to it +        self.assertEqual(models.BaseFind.objects.filter( +            pk=self.base_finds[0].pk).count(), 1) +        self.finds[1].delete() +        self.assertEqual(models.BaseFind.objects.filter( +            pk=self.base_finds[0].pk).count(), 0) +  class FindSearchTest(FindInit, TestCase):      fixtures = FIND_FIXTURES  | 
