summaryrefslogtreecommitdiff
path: root/archaeological_context_records
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@proxience.com>2015-09-22 01:06:13 +0200
committerÉtienne Loks <etienne.loks@proxience.com>2015-09-22 01:06:13 +0200
commit0c9a05e24c1abe80f5dedebe256aca9c6ef80e03 (patch)
tree574507f07f8c7631593b530830ef47a3aaef4e91 /archaeological_context_records
parentb80b324bdd32c383880ee77c63539144bd46e477 (diff)
downloadIshtar-0c9a05e24c1abe80f5dedebe256aca9c6ef80e03.tar.bz2
Ishtar-0c9a05e24c1abe80f5dedebe256aca9c6ef80e03.zip
Add relation between operations
Diffstat (limited to 'archaeological_context_records')
-rw-r--r--archaeological_context_records/models.py62
1 files changed, 4 insertions, 58 deletions
diff --git a/archaeological_context_records/models.py b/archaeological_context_records/models.py
index 81120d1f7..9c5cf52f4 100644
--- a/archaeological_context_records/models.py
+++ b/archaeological_context_records/models.py
@@ -25,7 +25,8 @@ from django.db.models.signals import post_delete
from django.utils.translation import ugettext_lazy as _, ugettext, pgettext
from ishtar_common.models import GeneralType, BaseHistorizedItem, \
- HistoricalRecords, OwnPerms, ShortMenuItem, Source
+ HistoricalRecords, OwnPerms, ShortMenuItem, Source, GeneralRelationType,\
+ GeneralRecordRelations, post_delete_record_relation
from archaeological_operations.models import Operation, Period, Parcel
@@ -273,9 +274,7 @@ class ContextRecord(BaseHistorizedItem, OwnPerms, ShortMenuItem):
return FindSource.objects.filter(find__base_finds__context_record=self)
-class RelationType(GeneralType):
- order = models.IntegerField(_(u"Order"), default=1)
- symmetrical = models.BooleanField(_(u"Symmetrical"))
+class RelationType(GeneralRelationType):
inverse_relation = models.ForeignKey(
'RelationType', verbose_name=_(u"Inverse relation"), blank=True,
null=True)
@@ -285,26 +284,7 @@ class RelationType(GeneralType):
verbose_name_plural = _(u"Relation types")
ordering = ('order',)
- def clean(self):
- # cannot have symmetrical and an inverse_relation
- if self.symmetrical and self.inverse_relation:
- raise ValidationError(
- _(u"Cannot have symmetrical and an inverse_relation"))
-
- def save(self, *args, **kwargs):
- obj = super(RelationType, self).save(*args, **kwargs)
- # after saving check that the inverse_relation of the inverse_relation
- # point to the saved object
- if self.inverse_relation \
- and (not self.inverse_relation.inverse_relation
- or self.inverse_relation.inverse_relation != self):
- self.inverse_relation.inverse_relation = self
- self.inverse_relation.symmetrical = False
- self.inverse_relation.save()
- return obj
-
-
-class RecordRelations(models.Model):
+class RecordRelations(GeneralRecordRelations, models.Model):
left_record = models.ForeignKey(ContextRecord,
related_name='right_relations')
right_record = models.ForeignKey(ContextRecord,
@@ -315,40 +295,6 @@ class RecordRelations(models.Model):
verbose_name = _(u"Record relation")
verbose_name_plural = _(u"Record relations")
- def save(self, *args, **kwargs):
- super(RecordRelations, self).save(*args, **kwargs)
-
- # after saving create the symetric or the inverse relation
-
- sym_rel_type = self.relation_type
- if not self.relation_type.symmetrical:
- sym_rel_type = self.relation_type.inverse_relation
-
- # no symetric/inverse is defined
- if not sym_rel_type:
- return
-
- dct = {'right_record': self.left_record,
- 'left_record': self.right_record, 'relation_type': sym_rel_type}
- RecordRelations.objects.get_or_create(**dct)
- return self
-
-
-def post_delete_record_relation(sender, instance, **kwargs):
- # delete symmetrical or inverse relation
- sym_rel_type = instance.relation_type
- if not instance.relation_type.symmetrical:
- sym_rel_type = instance.relation_type.inverse_relation
-
- # no symetric/inverse is defined
- if not sym_rel_type:
- return
-
- dct = {'right_record': instance.left_record,
- 'left_record': instance.right_record,
- 'relation_type': sym_rel_type}
- RecordRelations.objects.filter(**dct).delete()
-
post_delete.connect(post_delete_record_relation, sender=RecordRelations)