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/models.py | |
| parent | b80b324bdd32c383880ee77c63539144bd46e477 (diff) | |
| download | Ishtar-0c9a05e24c1abe80f5dedebe256aca9c6ef80e03.tar.bz2 Ishtar-0c9a05e24c1abe80f5dedebe256aca9c6ef80e03.zip  | |
Add relation between operations
Diffstat (limited to 'archaeological_context_records/models.py')
| -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)  | 
