mirror of
https://github.com/jazzband/django-auditlog.git
synced 2026-03-16 22:20:26 +00:00
Compare commits
5 commits
15ac64b45a
...
5a78bd331e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a78bd331e | ||
|
|
0e3a2ec1a7 | ||
|
|
dfd5b79d2d | ||
|
|
952924f4cf | ||
|
|
ee278edc8f |
4 changed files with 31 additions and 3 deletions
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
repos:
|
||||
- repo: https://github.com/psf/black-pre-commit-mirror
|
||||
rev: 26.1.0
|
||||
rev: 26.3.0
|
||||
hooks:
|
||||
- id: black
|
||||
language_version: python3.10
|
||||
|
|
@ -14,7 +14,7 @@ repos:
|
|||
- id: flake8
|
||||
args: ["--max-line-length", "110"]
|
||||
- repo: https://github.com/PyCQA/isort
|
||||
rev: 8.0.0
|
||||
rev: 8.0.1
|
||||
hooks:
|
||||
- id: isort
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
|
|
@ -23,7 +23,7 @@ repos:
|
|||
- id: pyupgrade
|
||||
args: [--py310-plus]
|
||||
- repo: https://github.com/adamchainz/django-upgrade
|
||||
rev: 1.29.1
|
||||
rev: 1.30.0
|
||||
hooks:
|
||||
- id: django-upgrade
|
||||
args: [--target-version, "4.2"]
|
||||
|
|
|
|||
|
|
@ -21,6 +21,11 @@ settings.AUDITLOG_EXCLUDE_TRACKING_FIELDS = getattr(
|
|||
settings, "AUDITLOG_EXCLUDE_TRACKING_FIELDS", ()
|
||||
)
|
||||
|
||||
# Exclude reverse relation fields across all models
|
||||
settings.AUDITLOG_EXCLUDE_REVERSE_RELATIONS = getattr(
|
||||
settings, "AUDITLOG_EXCLUDE_REVERSE_RELATIONS", False
|
||||
)
|
||||
|
||||
# Mask named fields across all models
|
||||
settings.AUDITLOG_MASK_TRACKING_FIELDS = getattr(
|
||||
settings, "AUDITLOG_MASK_TRACKING_FIELDS", ()
|
||||
|
|
|
|||
|
|
@ -218,6 +218,19 @@ def model_instance_diff(
|
|||
fields = set()
|
||||
model_fields = None
|
||||
|
||||
# Optionally exclude reverse relations (auto-created fields).
|
||||
# Reverse relations (auto_created & not concrete) can cause unwanted DB hits
|
||||
# and mutate instance._state.fields_cache as a side-effect.
|
||||
# Make this behavior opt-in via AUDITLOG_EXCLUDE_REVERSE_RELATIONS.
|
||||
if settings.AUDITLOG_EXCLUDE_REVERSE_RELATIONS:
|
||||
|
||||
def is_reverse_field(f):
|
||||
return getattr(f, "auto_created", False) and not getattr(
|
||||
f, "concrete", False
|
||||
)
|
||||
|
||||
fields = {f for f in fields if not is_reverse_field(f)}
|
||||
|
||||
if fields_to_check:
|
||||
fields = {
|
||||
field
|
||||
|
|
|
|||
|
|
@ -676,3 +676,13 @@ The mixin provides the following configuration options:
|
|||
- ``auditlog_history_template``: Template to use for rendering the history page (default: ``auditlog/object_history.html``)
|
||||
- ``auditlog_history_per_page``: Number of log entries to display per page (default: 10)
|
||||
|
||||
.. versionadded:: 3.2.2
|
||||
|
||||
Default: False
|
||||
|
||||
Use ``AUDITLOG_EXCLUDE_REVERSE_RELATIONS`` to exclude reverse relation fields (auto-created fields
|
||||
where `field.auto_created is True` and `field.concrete is False`) when computing
|
||||
model diffs. This avoids accidental database queries for related objects and avoids
|
||||
mutating `instance._state.fields_cache` as a side-effect.
|
||||
|
||||
Added to address: https://github.com/jazzband/django-auditlog/issues/551
|
||||
|
|
|
|||
Loading…
Reference in a new issue