diff options
| -rw-r--r-- | archaeological_context_records/models.py | 15 | ||||
| -rw-r--r-- | archaeological_operations/models.py | 53 | ||||
| -rw-r--r-- | ishtar_common/models.py | 18 |
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 |
