Exemplo n.º 1
0
    def __set__(self, instance, value):
        try:
            old_value = getattr(instance, self.field.name, None)
        except ObjectDoesNotExist:
            old_value = None

        result = super(VersionsReverseSingleRelatedObjectDescriptor,
                       self).__set__(instance, value)
        if old_value != value:
            related_field = instance._meta.get_field(
                self.field.name).related.get_accessor_name()

            # If this is a new instance, the save method handles updating related objects once
            # the object has been saved.
            if instance._get_pk_val() is not None:
                if old_value:
                    revision.stage_related_updates(old_value,
                                                   related_field,
                                                   'remove', [instance],
                                                   symmetrical=False)
                revision.stage_related_updates(value,
                                               related_field,
                                               'add', [instance],
                                               symmetrical=False)
        return result
Exemplo n.º 2
0
    def _save_base(self, *args, **kwargs):
        is_new = self._get_pk_val() is None
        super(VersionsModel, self).save(*args, **kwargs)

        if is_new:
            try:
                name_map = self._meta._name_map
            except AttributeError:
                name_map = self._meta.init_name_map()

            for name, data in name_map.items():
                if isinstance(data[0], related.ForeignKey):
                    related_field = self._meta.get_field(name).related.get_accessor_name()
                    obj = getattr(self, name, None)
                    if obj:
                        revision.stage_related_updates(obj, related_field, 'add', [self], symmetrical=False)
Exemplo n.º 3
0
    def __set__(self, instance, value):
        try:
            old_value = getattr(instance, self.field.name, None)
        except ObjectDoesNotExist:
            old_value = None

        result = super(VersionsReverseSingleRelatedObjectDescriptor, self).__set__(instance, value)
        if old_value != value:
            related_field = instance._meta.get_field(self.field.name).related.get_accessor_name()

            # If this is a new instance, the save method handles updating related objects once
            # the object has been saved.
            if instance._get_pk_val() is not None:
                if old_value:
                    revision.stage_related_updates(old_value, related_field, 'remove', [instance], symmetrical=False)
                revision.stage_related_updates(value, related_field, 'add', [instance], symmetrical=False)
        return result
Exemplo n.º 4
0
    def _save_base(self, *args, **kwargs):
        is_new = self._get_pk_val() is None
        super(VersionsModel, self).save(*args, **kwargs)

        if is_new:
            try:
                name_map = self._meta._name_map
            except AttributeError:
                name_map = self._meta.init_name_map()

            for name, data in name_map.items():
                if isinstance(data[0], related.ForeignKey):
                    related_field = self._meta.get_field(
                        name).related.get_accessor_name()
                    obj = getattr(self, name, None)
                    if obj:
                        revision.stage_related_updates(obj,
                                                       related_field,
                                                       'add', [self],
                                                       symmetrical=False)
Exemplo n.º 5
0
 def clear(self, *args, **kwargs):
     revision.stage_related_updates(self.related_model_instance,
                                    self.related_model_attname,
                                    'clear')
     if self.related_model_instance._versions_status == VERSIONS_STATUS_PUBLISHED:
         super(VersionsRelatedManager, self).clear(*args, **kwargs)
Exemplo n.º 6
0
 def clear(self, *args, **kwargs):
     revision.stage_related_updates(self.related_model_instance, self.related_model_attname, 'clear')
     if self.related_model_instance._versions_status == VERSIONS_STATUS_PUBLISHED:
         super(VersionsRelatedManager, self).clear(*args, **kwargs)