summaryrefslogtreecommitdiff
path: root/archaeological_operations/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_operations/models.py')
-rw-r--r--archaeological_operations/models.py53
1 files changed, 36 insertions, 17 deletions
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)