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.
Fields 9
idAutoFieldpkeventForeignKeynullsource
event = models.ForeignKey(
to="event.Event",
on_delete=models.PROTECT,
related_name="log_entries",
null=True,
blank=True,
)
personForeignKeynullsource
person = models.ForeignKey(
to="person.User",
on_delete=models.PROTECT,
related_name="log_entries",
null=True,
blank=True,
)
content_typeForeignKeysource
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_objectStaleTolerantGenericForeignKeyAttributes 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})"
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