Code reference › models › common

class

ActivityLog

pretalx.common.models.log.ActivityLog source

This model logs changes and actions taken by users and automations.

It is not designed to provide a complete or reliable audit trail. See pretalx.common.models.mixins.LogMixin for the corresponding mixin used by most other models.

InheritsModelAltersData

Fields 9

idAutoFieldpk
eventForeignKeynullEventsource
event = models.ForeignKey(
    to="event.Event",
    on_delete=models.PROTECT,
    related_name="log_entries",
    null=True,
    blank=True,
)
personForeignKeynullUsersource
person = models.ForeignKey(
    to="person.User",
    on_delete=models.PROTECT,
    related_name="log_entries",
    null=True,
    blank=True,
)
content_typeForeignKey→ ContentTypesource
content_type = models.ForeignKey(to=ContentType, on_delete=models.CASCADE)
object_idPositiveIntegerFieldsource
object_id = models.PositiveIntegerField(db_index=True)
timestampDateTimeFieldsource
timestamp = models.DateTimeField(auto_now_add=True, db_index=True)
action_typeCharFieldsource
action_type = models.CharField(max_length=200)
dataJSONFieldnullsource
data = models.JSONField(null=True, blank=True, default=dict)
is_orga_actionBooleanFieldsource
is_orga_action = models.BooleanField(default=False)
Reverse relations 1
content_objectStaleTolerantGenericForeignKey

Attributes 1

objects<django_scopes.manager.ScopedManager.<locals>.Manager>

Properties 6

Defined here

changessource
@cached_property
def changes(self):
    from pretalx.common.log import (  # noqa: PLC0415 -- thin method
        resolve_log_changes,
    )

    return resolve_log_changes(self)
detail_urlsource
@cached_property
def detail_url(self) -> str:
    if self.event:
        return reverse(
            "orga:event.history.detail",
            kwargs={"event": self.event.slug, "pk": self.pk},
        )
    return reverse("orga:admin.log.detail", kwargs={"pk": self.pk})
displaysource
@cached_property
def display(self) -> str:
    for _receiver, response in activitylog_display.send(
        self.event, activitylog=self
    ):
        if response:
            return response

    logger = logging.getLogger(__name__)
    logger.warning('Unknown log action "%s".', self.action_type)
    return self.action_type
display_objectsourceA link (formatted HTML) to the object in question.
@cached_property
def display_object(self) -> str:
    """A link (formatted HTML) to the object in question."""
    if not self.content_object:
        return ""

    for _receiver, response in activitylog_object_link.send(
        sender=self.event, activitylog=self
    ):
        if response:
            return response
    return ""
json_datasource
@cached_property
def json_data(self):
    # Kept for backwards compatibility, as well as to avoid None-checks
    return self.data or {}
person_display_namesource
@cached_property
def person_display_name(self) -> str:
    if not self.person_id:
        return ""
    if self.event_id:
        from pretalx.common.log import (  # noqa: PLC0415 -- circular import
            speaker_names_for_logs,
        )

        # When used in bulk, should have group_activity_log run to get data.
        if name := speaker_names_for_logs([self]).get(
            (self.event_id, self.person_id)
        ):
            return name
    return self.person.get_display_name()

Methods 28

Defined here

__str__()sourceReturn str(self).

on pretalx.common.models.log.ActivityLog source

def __str__(self):
    event = getattr(self.event, "slug", "None")
    person = getattr(self.person, "name", "None")
    return f"ActivityLog(event={event}, person={person}, content_object={self.content_object}, action_type={self.action_type})"

on django.db.models.Model

Return str(self).

def __str__(self):
    return "%s object (%s)" % (self.__class__.__name__, self.pk)

From Model django.db.models

Standard Django API, unchanged — save(), delete(), full_clean() and 22 more.
adeletearefresh_from_dbasavecleanclean_fieldsdate_error_messagedeletefull_cleanget_constraintsget_deferred_fieldsprepare_database_saverefresh_from_dbsavesave_baseserializable_valueunique_error_messagevalidate_constraintsvalidate_unique__eq____getstate____hash____init____reduce____repr____setstate__

Added at runtime

Added by Django or another library dynamically after class creation.
get_next_by_timestampget_previous_by_timestamp