diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2026-03-27 12:37:31 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2026-03-27 12:50:06 +0100 |
| commit | 1b1925afbcc381df1fbbb6f8b8488683f17378a4 (patch) | |
| tree | f2ab99fbad809aa9c6a398b6b5af5f1827d434f3 /archaeological_operations/models.py | |
| parent | 41de8783a4307a305a09ae522db9cec53f4b43ca (diff) | |
| download | Ishtar-1b1925afbcc381df1fbbb6f8b8488683f17378a4.tar.bz2 Ishtar-1b1925afbcc381df1fbbb6f8b8488683f17378a4.zip | |
🗃️ sites - models: add relations between sites - minor relations between items refactoring
Diffstat (limited to 'archaeological_operations/models.py')
| -rw-r--r-- | archaeological_operations/models.py | 53 |
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) |
