summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_context_records/models.py15
-rw-r--r--archaeological_operations/models.py53
-rw-r--r--ishtar_common/models.py18
3 files changed, 55 insertions, 31 deletions
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 2eb9c0380..d1b1fb147 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -56,6 +56,7 @@ from ishtar_common.models import (
post_delete_record_relation,
post_save_cache,
ValueGetter,
+ RecordRelationManager,
RelationItem,
Town,
get_current_profile,
@@ -1334,15 +1335,6 @@ class RelationType(GeneralRelationType):
ordering = ("order", "label")
-class RecordRelationsManager(models.Manager):
- def get_by_natural_key(self, left_record, right_record, relation_type):
- return self.get(
- left_record__uuid=left_record,
- right_record__uuid=right_record,
- relation_type__txt_idx=relation_type,
- )
-
-
class RecordRelations(GeneralRecordRelations):
MAIN_ATTR = "left_record"
left_record = models.ForeignKey(
@@ -1352,7 +1344,7 @@ class RecordRelations(GeneralRecordRelations):
ContextRecord, related_name="left_relations", on_delete=models.CASCADE
)
relation_type = models.ForeignKey(RelationType, on_delete=models.PROTECT)
- objects = RecordRelationsManager()
+ objects = RecordRelationManager()
TABLE_COLS = [
"left_record__label",
"left_record__unit",
@@ -1388,9 +1380,6 @@ class RecordRelations(GeneralRecordRelations):
("view_recordrelation", "Can view all Context record relations"),
]
- def natural_key(self):
- return self.left_record.uuid, self.right_record.uuid, self.relation_type.txt_idx
-
def post_delete_cr_record_relation(sender, instance, **kwargs):
if getattr(sender, "_no_post_treatments", False):
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index c6706c7dc..cb9a2ab86 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -65,6 +65,7 @@ from ishtar_common.models import (
post_delete_record_relation,
post_save_cache,
QualifiedBiographicalNote,
+ RecordRelationManager,
RelationItem,
SourceType,
Town,
@@ -1183,6 +1184,40 @@ for attr in ArchaeologicalSite.HISTORICAL_M2M:
)
+class SiteRelationType(GeneralRelationType):
+ class Meta:
+ verbose_name = _("Site relation type")
+ verbose_name_plural = _("Site relation types")
+ ordering = ("order", "label")
+
+
+class SiteRecordRelations(GeneralRecordRelations):
+ MAIN_ATTR = "left_record"
+ left_record = models.ForeignKey(
+ ArchaeologicalSite, related_name="right_relations", on_delete=models.CASCADE
+ )
+ right_record = models.ForeignKey(
+ ArchaeologicalSite, related_name="left_relations", on_delete=models.CASCADE
+ )
+ relation_type = models.ForeignKey(SiteRelationType, on_delete=models.PROTECT)
+ objects = RecordRelationManager()
+
+ class Meta:
+ verbose_name = _("Site record relation")
+ verbose_name_plural = _("Site record relations")
+ ordering = (
+ "left_record__cached_label",
+ "relation_type",
+ "right_record__cached_label",
+ )
+ permissions = [
+ ("view_siterelation", "Can view all Site relations"),
+ ]
+
+
+post_delete.connect(post_delete_record_relation, sender=SiteRecordRelations)
+
+
def get_values_town_related(item, prefix, values, filtr=None):
if not filtr or prefix + "parcellist" in filtr:
values[prefix + "parcellist"] = item.render_parcels()
@@ -2920,15 +2955,6 @@ class RelationType(GeneralRelationType):
ordering = ("order", "label")
-class OperationRecordRelationManager(models.Manager):
- def get_by_natural_key(self, left_record, right_record, relation_type):
- return self.get(
- left_record__uuid=left_record,
- right_record__uuid=right_record,
- relation_type__txt_idx=relation_type,
- )
-
-
class RecordRelations(GeneralRecordRelations):
MAIN_ATTR = "left_record"
left_record = models.ForeignKey(
@@ -2938,7 +2964,7 @@ class RecordRelations(GeneralRecordRelations):
Operation, related_name="left_relations", on_delete=models.CASCADE
)
relation_type = models.ForeignKey(RelationType, on_delete=models.PROTECT)
- objects = OperationRecordRelationManager()
+ objects = RecordRelationManager()
class Meta:
verbose_name = _("Operation record relation")
@@ -2952,13 +2978,6 @@ class RecordRelations(GeneralRecordRelations):
("view_operationrelation", "Can view all Operation relations"),
]
- def natural_key(self):
- return (
- self.left_record.uuid,
- self.right_record.uuid,
- self.relation_type.txt_idx,
- )
-
post_delete.connect(post_delete_record_relation, sender=RecordRelations)
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 04defbd81..a6aab9416 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -874,6 +874,15 @@ class GeneralRelationType(GeneralType):
return obj
+class RecordRelationManager(models.Manager):
+ def get_by_natural_key(self, left_record, right_record, relation_type):
+ return self.get(
+ left_record__uuid=left_record,
+ right_record__uuid=right_record,
+ relation_type__txt_idx=relation_type,
+ )
+
+
class GeneralRecordRelations(Imported):
class Meta:
abstract = True
@@ -882,8 +891,15 @@ class GeneralRecordRelations(Imported):
def general_types(cls):
return ["relation_type"]
+ def natural_key(self):
+ return (
+ self.left_record.uuid,
+ self.right_record.uuid,
+ self.relation_type.txt_idx,
+ )
+
def save(self, *args, **kwargs):
- super(GeneralRecordRelations, self).save(*args, **kwargs)
+ super().save(*args, **kwargs)
# after saving create the symmetric or the inverse relation