diff options
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 |
commit | 0c9a05e24c1abe80f5dedebe256aca9c6ef80e03 (patch) | |
tree | 574507f07f8c7631593b530830ef47a3aaef4e91 /archaeological_context_records | |
parent | b80b324bdd32c383880ee77c63539144bd46e477 (diff) | |
download | Ishtar-0c9a05e24c1abe80f5dedebe256aca9c6ef80e03.tar.bz2 Ishtar-0c9a05e24c1abe80f5dedebe256aca9c6ef80e03.zip |
Add relation between operations
Diffstat (limited to 'archaeological_context_records')
-rw-r--r-- | archaeological_context_records/models.py | 62 |
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) |