Skip to content

mixins

django_spire.history.mixins

HistoryModelMixin

Bases: Model

is_active = models.BooleanField(default=True, editable=False) class-attribute instance-attribute

is_deleted = models.BooleanField(default=False, editable=False) class-attribute instance-attribute

history_events = GenericRelation(HistoryEvent, related_query_name='history_event', editable=False) class-attribute instance-attribute

created_datetime = models.DateTimeField(default=localtime, editable=False) class-attribute instance-attribute

Meta

abstract = True class-attribute instance-attribute

save

Source code in django_spire/history/mixins.py
def save(self, *args, **kwargs) -> None:
    is_new_row = self._state.adding

    super().save(*args, **kwargs)

    if is_new_row:
        self.history_events.create(event=HistoryEventChoices.CREATED)
    else:
        self.history_events.create(event=HistoryEventChoices.UPDATED)

set_active

Source code in django_spire/history/mixins.py
def set_active(self) -> None:
    self.is_active = True
    self.save()
    self.history_events.create(event=HistoryEventChoices.ACTIVE)

set_deleted

Source code in django_spire/history/mixins.py
def set_deleted(self) -> None:
    was_deleted = self.is_deleted
    self.is_deleted = True

    if not was_deleted:
        setattr(self, ACTIVITY_VERB_ATTRIBUTE, ActivityVerb.DELETED)

    try:
        self.save()
    except Exception:
        self.is_deleted = was_deleted
        raise
    finally:
        self.__dict__.pop(ACTIVITY_VERB_ATTRIBUTE, None)

    self.history_events.create(event=HistoryEventChoices.DELETED)

set_inactive

Source code in django_spire/history/mixins.py
def set_inactive(self) -> None:
    self.is_active = False
    self.save()
    self.history_events.create(event=HistoryEventChoices.INACTIVE)

un_set_deleted

Source code in django_spire/history/mixins.py
def un_set_deleted(self) -> None:
    self.is_deleted = False
    self.save()
    self.history_events.create(event=HistoryEventChoices.UNDELETED)