# activity.RequestFingerprintLog
## Model Info
| Key | Value |
|---|-----|
| Model Name | RequestFingerprintLog |
| Verbose Name | request fingerprint log |
| Verbose Name Plural | request fingerprint logs |
| Docstring |
This table is for indexing the activity log by some request fingerprints, (only for
specific actions).
|
| Is Abstract | False |
| Is Proxy | False |
| Is Managed | True |
| Ordering | ('-created',) |
| Permissions | [] |
| Default Permissions | ('add', 'change', 'delete', 'view') |
| Indexes | [] |
| Constraints | [] |
| Database Table | log_activity_request_fingerprint |
| Base Manager | None |
| Default Manager | None |
| File | /data/olympia/src/olympia/activity/models.py |
| Starting Line Number | 287 |
| Method Resolution Order | (, , , , , ) |
## Fields
| Field Name | Field Type | Database Column | Database Type | Verbose Name |
|----------|----------|---------------|-------------|------------|
| `activity_log` | OneToOneField | activity_log_id | integer | activity log |
| `created` | DateTimeField | created | datetime(6) | created |
| `id (pk)` | AutoField | id | integer AUTO_INCREMENT | ID |
| `ja4` | CharField | ja4 | varchar(36) | ja4 |
| `modified` | DateTimeField | modified | datetime(6) | modified |
| `signals` | JSONField | signals | json | signals |
## Relations
| Field Name | Field Type | Database Column | Database Type | Related Model | Related Name |
|----------|----------|---------------|-------------|-------------|------------|
| `activity_log` | OneToOneField | activity_log_id | integer | activity.ActivityLog | requestfingerprintlog_set |
fields_reverse_relation=[]
## Methods
### Other Methods
| Method Name | Signature |
|-----------|---------|
| `get_admin_absolute_url` | `(self)` |
| `get_admin_url_path` | `(self)` |
| `get_next_by_created` | `(self, *, field=, is_next=True, **kwargs)` |
| `get_next_by_modified` | `(self, *, field=, is_next=True, **kwargs)` |
| `get_previous_by_created` | `(self, *, field=, is_next=False, **kwargs)` |
| `get_previous_by_modified` | `(self, *, field=, is_next=False, **kwargs)` |
| `get_unfiltered_manager` | `()` |
| `reload` | `(self)` |
| `serializable_reference` | `(self)` |
| `update` | `(self, **kw)` |
### Private Methods
| Method Name | Signature |
|-----------|---------|
| `_get_field_value_map` | `(self, meta, exclude=None)` |
## Custom Managers
### default
**Class:** `ManagerBase`
*Base for all managers in AMO.
Returns BaseQuerySets.
If a model has translated fields, they'll be attached through a transform
function.*
#### Custom Methods
##### `transform(self, fn)`
#### Custom QuerySet
**Class:** `BaseQuerySet`
*Represent a lazy database lookup for a set of objects.*
##### Custom Methods
###### `get_with_primary_fallback(self, *args, **kwargs)`
*Like get(), but if using a non-default database and DoesNotExist is
raised, another attempt is made using the default database instead.
Intended to be used in places where replication lag could cause the
object not to exist for a brief moment and forcing use of primary db at
all times is undesirable.*
###### `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.*
###### `pop_transforms(self)`
###### `transform(self, fn)`
### objects
**Class:** `ManagerBase`
*Base for all managers in AMO.
Returns BaseQuerySets.
If a model has translated fields, they'll be attached through a transform
function.*
#### Custom Methods
##### `transform(self, fn)`
#### Custom QuerySet
**Class:** `BaseQuerySet`
*Represent a lazy database lookup for a set of objects.*
##### Custom Methods
###### `get_with_primary_fallback(self, *args, **kwargs)`
*Like get(), but if using a non-default database and DoesNotExist is
raised, another attempt is made using the default database instead.
Intended to be used in places where replication lag could cause the
object not to exist for a brief moment and forcing use of primary db at
all times is undesirable.*
###### `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.*
###### `pop_transforms(self)`
###### `transform(self, fn)`
---
!!! THIS DOCUMENT WAS *AUTOGENERATED* ON 2025-11-24 !!!