# activity.ActivityLog ## Model Info | Key | Value | |---|-----| | Model Name | ActivityLog | | Verbose Name | activity log | | Verbose Name Plural | activity logs | | Docstring | <p>ActivityLog(id, created, modified, user, action, \_arguments, \_details)</p> | | Is Abstract | False | | Is Proxy | False | | Is Managed | True | | Ordering | ('-created',) | | Permissions | [] | | Default Permissions | ('add', 'change', 'delete', 'view') | | Indexes | [<Index: fields=['action'] name='log_activity_1bd4707b'>, <Index: fields=['created'] name='log_activity_created_idx'>] | | Constraints | [] | | Database Table | log_activity | | Base Manager | None | | Default Manager | None | | File | /data/olympia/src/olympia/activity/models.py | | Starting Line Number | 521 | | Method Resolution Order | (<class 'olympia.activity.models.ActivityLog'>, <class 'olympia.amo.models.ModelBase'>, <class 'olympia.amo.models.SaveUpdateMixin'>, <class 'django.db.models.base.Model'>, <class 'django.db.models.utils.AltersData'>, <class 'object'>) | ## Fields | Field Name | Field Type | Database Column | Database Type | Verbose Name | |----------|----------|---------------|-------------|------------| | `_arguments` | TextField | arguments | longtext | arguments | | `_details` | TextField | details | longtext | details | | `action` | SmallIntegerField | action | smallint | action | | `addonlog` | ManyToOneRel | | integer | | | `attachmentlog` | OneToOneRel | | integer | | | `blocklog` | ManyToOneRel | | integer | | | `cinderpolicylog` | ManyToOneRel | | integer | | | `commentlog` | ManyToOneRel | | integer | | | `contentdecision` | ManyToManyRel | | through activity.ContentDecisionLog | | | `contentdecisionlog` | ManyToOneRel | | integer | | | `created` | DateTimeField | created | datetime(6) | created | | `grouplog` | ManyToOneRel | | integer | | | `id (pk)` | AutoField | id | integer AUTO_INCREMENT | ID | | `iplog` | OneToOneRel | | integer | | | `modified` | DateTimeField | modified | datetime(6) | modified | | `ratinglog` | ManyToOneRel | | integer | | | `reviewactionreasonlog` | ManyToOneRel | | integer | | | `reviewqueuehistory` | ManyToOneRel | | integer | | | `user` | ForeignKey | user_id | integer | user | | `versionlog` | ManyToOneRel | | integer | | ## Relations | Field Name | Field Type | Database Column | Database Type | Related Model | Related Name | |----------|----------|---------------|-------------|-------------|------------| | `user` | ForeignKey | user_id | integer | users.UserProfile | activitylog_set | fields_reverse_relation=[FieldReverseRelation(name='activitylog_set', field_type='ManyToManyRel', field_db_type='through activity.ContentDecisionLog', related_model='abuse.ContentDecision', field_name_on_related_model='activities', field_type_on_related_model='ManyToManyField'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='activity.AddonLog', field_name_on_related_model='activity_log', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='activity.CommentLog', field_name_on_related_model='activity_log', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='activity.VersionLog', field_name_on_related_model='activity_log', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='activity.ReviewActionReasonLog', field_name_on_related_model='activity_log', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='activity.CinderPolicyLog', field_name_on_related_model='activity_log', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='activity.ContentDecisionLog', field_name_on_related_model='activity_log', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='activity.GroupLog', field_name_on_related_model='activity_log', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='activity.BlockLog', field_name_on_related_model='activity_log', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='activitylog_set', field_type='OneToOneRel', field_db_type='integer', related_model='activity.IPLog', field_name_on_related_model='activity_log', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='activity.RatingLog', field_name_on_related_model='activity_log', field_type_on_related_model='ForeignKey'), FieldReverseRelation(name='activitylog_set', field_type='OneToOneRel', field_db_type='integer', related_model='activity.AttachmentLog', field_name_on_related_model='activity_log', field_type_on_related_model='OneToOneField'), FieldReverseRelation(name='activitylog_set', field_type='ManyToOneRel', field_db_type='integer', related_model='reviewers.ReviewQueueHistory', field_name_on_related_model='review_decision_log', field_type_on_related_model='ForeignKey')] ## Reverse Relations | Field Name | Field Type | Database Type | Related Model | Field Name on Related Model | Field Type on Related Model | |----------|----------|-------------|-------------|---------------------------|---------------------------| | `activitylog_set` | ManyToManyRel | through activity.ContentDecisionLog | abuse.ContentDecision | activities | ManyToManyField | | `activitylog_set` | ManyToOneRel | integer | activity.AddonLog | activity_log | ForeignKey | | `activitylog_set` | ManyToOneRel | integer | activity.CommentLog | activity_log | ForeignKey | | `activitylog_set` | ManyToOneRel | integer | activity.VersionLog | activity_log | ForeignKey | | `activitylog_set` | ManyToOneRel | integer | activity.ReviewActionReasonLog | activity_log | ForeignKey | | `activitylog_set` | ManyToOneRel | integer | activity.CinderPolicyLog | activity_log | ForeignKey | | `activitylog_set` | ManyToOneRel | integer | activity.ContentDecisionLog | activity_log | ForeignKey | | `activitylog_set` | ManyToOneRel | integer | activity.GroupLog | activity_log | ForeignKey | | `activitylog_set` | ManyToOneRel | integer | activity.BlockLog | activity_log | ForeignKey | | `activitylog_set` | OneToOneRel | integer | activity.IPLog | activity_log | OneToOneField | | `activitylog_set` | ManyToOneRel | integer | activity.RatingLog | activity_log | ForeignKey | | `activitylog_set` | OneToOneRel | integer | activity.AttachmentLog | activity_log | OneToOneField | | `activitylog_set` | ManyToOneRel | integer | reviewers.ReviewQueueHistory | review_decision_log | ForeignKey | ## Methods ### Other Methods | Method Name | Signature | |-----------|---------| | `arguments_builder` | `(activities)` | | `get_action_display` | `(self, *, field=<django.db.models.fields.SmallIntegerField: action>)` | | `get_admin_absolute_url` | `(self)` | | `get_admin_url_path` | `(self)` | | `get_next_by_created` | `(self, *, field=<django.db.models.fields.DateTimeField: created>, is_next=True, **kwargs)` | | `get_next_by_modified` | `(self, *, field=<django.db.models.fields.DateTimeField: modified>, is_next=True, **kwargs)` | | `get_previous_by_created` | `(self, *, field=<django.db.models.fields.DateTimeField: created>, is_next=False, **kwargs)` | | `get_previous_by_modified` | `(self, *, field=<django.db.models.fields.DateTimeField: modified>, is_next=False, **kwargs)` | | `get_unfiltered_manager` | `()` | | `reload` | `(self)` | | `serializable_reference` | `(self)` | | `set_arguments` | `(self, args=None)` | | `to_string` | `(self, type_=None)` | | `transformer_anonymize_user_for_developer` | `(logs)` | | `update` | `(self, **kw)` | ### Private Methods | Method Name | Signature | |-----------|---------| | `_get_field_value_map` | `(self, meta, exclude=None)` | ## Custom Managers ### default **Class:** `ActivityLogManager` *Base for all managers in AMO. Returns BaseQuerySets. If a model has translated fields, they'll be attached through a transform function.* #### Custom Methods ##### `for_addons(self, addons)` ##### `for_block(self, block)` ##### `for_groups(self, groups)` ##### `for_guidblock(self, guid)` ##### `for_versions(self, versions)` ##### `moderation_events(self)` ##### `review_log(self)` ##### `transform(self, fn)` #### Custom QuerySet **Class:** `ActivityLogQuerySet` *Represent a lazy database lookup for a set of objects.* ##### Custom Methods ###### `default_transformer(self, logs)` ###### `no_transforms(self)` ###### `only_translations(self)` *Remove all transforms except translations.* ###### `optimized_count(self)` *Slightly optimized count() for cases where there is a DISTINCT in the queryset. When a count() call is made on a queryset that has a distinct, that causes django to run the full SELECT (including all fields, distinct, ordering etc) in a subquery and then COUNT() on the result of that subquery, which is costly/innefficient. That's tracked in https://code.djangoproject.com/ticket/30685. We can't easily fix the fact that there is a subquery, but we can avoid selecting all fields and ordering in that subquery needlessly.* ###### `pending_for_developer(self, for_version=None)` *Return ActivityLog that are considered "pending" for developers. An Activity will be considered "pending" if it's a review queue activity not hidden to developers that is more recent that the latest activity created by a developer/reviewer. Said differently: if a developer doesn't do something after a reviewer action, that reviewer action will be considered pending.* ###### `pop_transforms(self)` ###### `transform(self, fn)` ### objects **Class:** `ActivityLogManager` *Base for all managers in AMO. Returns BaseQuerySets. If a model has translated fields, they'll be attached through a transform function.* #### Custom Methods ##### `for_addons(self, addons)` ##### `for_block(self, block)` ##### `for_groups(self, groups)` ##### `for_guidblock(self, guid)` ##### `for_versions(self, versions)` ##### `moderation_events(self)` ##### `review_log(self)` ##### `transform(self, fn)` #### Custom QuerySet **Class:** `ActivityLogQuerySet` *Represent a lazy database lookup for a set of objects.* ##### Custom Methods ###### `default_transformer(self, logs)` ###### `no_transforms(self)` ###### `only_translations(self)` *Remove all transforms except translations.* ###### `optimized_count(self)` *Slightly optimized count() for cases where there is a DISTINCT in the queryset. When a count() call is made on a queryset that has a distinct, that causes django to run the full SELECT (including all fields, distinct, ordering etc) in a subquery and then COUNT() on the result of that subquery, which is costly/innefficient. That's tracked in https://code.djangoproject.com/ticket/30685. We can't easily fix the fact that there is a subquery, but we can avoid selecting all fields and ordering in that subquery needlessly.* ###### `pending_for_developer(self, for_version=None)` *Return ActivityLog that are considered "pending" for developers. An Activity will be considered "pending" if it's a review queue activity not hidden to developers that is more recent that the latest activity created by a developer/reviewer. Said differently: if a developer doesn't do something after a reviewer action, that reviewer action will be considered pending.* ###### `pop_transforms(self)` ###### `transform(self, fn)` --- !!! THIS DOCUMENT WAS *AUTOGENERATED* ON 2025-08-02 !!!