summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2017-08-29 16:13:34 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2017-08-29 16:13:34 +0200
commit066d7c88825a983997cfee9ac61003b5d48b35da (patch)
tree4692f985fcc13b16c5e5ca14f626b6b2ce435a4d
parent45c062ade6edecce68e479b09117d8d75dde18a0 (diff)
downloadIshtar-066d7c88825a983997cfee9ac61003b5d48b35da.tar.bz2
Ishtar-066d7c88825a983997cfee9ac61003b5d48b35da.zip
Find deletions: delete associated base find (refs #3724)
-rw-r--r--archaeological_finds/models_finds.py10
-rw-r--r--archaeological_finds/tests.py14
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