summaryrefslogtreecommitdiff
path: root/archaeological_context_records
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_context_records')
-rw-r--r--archaeological_context_records/models.py15
-rw-r--r--archaeological_context_records/tests.py30
2 files changed, 39 insertions, 6 deletions
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 4da7e35e2..87300b899 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -27,7 +27,7 @@ from django.contrib.postgres.indexes import GinIndex
from django.contrib.sites.models import Site
from django.db import transaction, OperationalError, IntegrityError
from django.db.models import Q
-from django.db.models.signals import post_delete, post_save, m2m_changed
+from django.db.models.signals import m2m_changed, pre_delete, post_delete, post_save
from django.urls import reverse, reverse_lazy
from ishtar_common.utils import get_generated_id, gettext_lazy as _, pgettext_lazy, \
@@ -59,6 +59,7 @@ from ishtar_common.models import (
RelationItem,
Town,
get_current_profile,
+ geo_item_pre_delete,
document_attached_changed,
HistoryModel,
GeoItem,
@@ -1485,10 +1486,11 @@ class ContextRecord(
Return sub object list that will be deleted
:return: {"Sub object type": ["Sub object 1", "Sub object 2", ...]}
"""
+ data = super().get_deleted_data()
if not self.base_finds.count():
- return {}
+ return data
lbl = str(_("Base finds"))
- data = {lbl: []}
+ data[lbl] = []
for item in self.base_finds.all():
data[lbl].append(str(item))
for key, value in item.get_deleted_data().items():
@@ -1514,11 +1516,11 @@ class ContextRecord(
def context_record_post_save(sender, **kwargs):
- cached_label_changed(sender=sender, **kwargs)
- post_save_geo(sender=sender, **kwargs)
instance = kwargs.get("instance", None)
- if not instance or not instance.pk:
+ if not instance or not instance.pk or getattr(instance, "__delete", False):
return
+ cached_label_changed(sender=sender, **kwargs)
+ post_save_geo(sender=sender, **kwargs)
profile = get_current_profile()
if profile.parent_relations_engine == "T":
ContextRecordTree._update_self_relation(instance.pk) # on creation: manage self relation
@@ -1532,6 +1534,7 @@ def context_record_post_save(sender, **kwargs):
cached_label_changed(Find, instance=f)
+pre_delete.connect(geo_item_pre_delete, sender=ContextRecord)
post_save.connect(context_record_post_save, sender=ContextRecord)
m2m_changed.connect(document_attached_changed, sender=ContextRecord.documents.through)
m2m_changed.connect(geodata_attached_changed, sender=ContextRecord.geodata.through)
diff --git a/archaeological_context_records/tests.py b/archaeological_context_records/tests.py
index 942ad83f1..0338a2f20 100644
--- a/archaeological_context_records/tests.py
+++ b/archaeological_context_records/tests.py
@@ -24,6 +24,7 @@ import locale
from django.apps import apps
from django.conf import settings
from django.contrib.auth.models import Permission, Group
+from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
from django.core.files.uploadedfile import SimpleUploadedFile
from django.template.defaultfilters import slugify
@@ -600,6 +601,35 @@ class ContextRecordTest(ContextRecordInit, TestCase):
# same unit and other operation -> 1
self.assertEqual(cr3.custom_index, 1)
+ def test_cascade_delete(self):
+ cr1 = self.context_records[0]
+ # add a geo_vector associated to the town
+ source_content_type_pk = ContentType.objects.get(
+ app_label="ishtar_common",
+ model="town"
+ ).pk
+ geo_vector = models.GeoVectorData.objects.create(
+ source_content_type_id=source_content_type_pk,
+ source_id=cr1.town_id,
+ name="geo",
+ comment="This is a comment."
+ )
+ cr1.geodata.add(geo_vector)
+ BaseFind = apps.get_model("archaeological_finds", "BaseFind")
+ bf = BaseFind.objects.create(context_record=cr1)
+ bf.geodata.add(geo_vector)
+ Find = apps.get_model("archaeological_finds", "Find")
+ find = Find.objects.create()
+ bf.find.add(find)
+ dating = models.ContextRecordDating.objects.create(context_record=cr1)
+ cr1.operation.delete()
+ self.assertEqual(models.ContextRecord.objects.filter(id=cr1.id).count(), 0)
+ self.assertEqual(Find.objects.filter(id=find.id).count(), 0)
+ self.assertEqual(BaseFind.objects.filter(id=bf.id).count(), 0)
+ self.assertEqual(models.ContextRecordDating.objects.filter(id=dating.id).count(),
+ 0)
+ self.assertEqual(models.GeoVectorData.objects.filter(id=geo_vector.id).count(), 1)
+
class ContextRecordQATest(ContextRecordInit, TestCase):
fixtures = CONTEXT_RECORD_TOWNS_FIXTURES