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
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)
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
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)
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)