mirror of
https://github.com/jazzband/django-auditlog.git
synced 2026-03-16 22:20:26 +00:00
Compare commits
5 commits
fc56737e48
...
9915f522d3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9915f522d3 | ||
|
|
0e3a2ec1a7 | ||
|
|
dfd5b79d2d | ||
|
|
aca5370b76 | ||
|
|
99847e5d40 |
3 changed files with 38 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"]
|
||||
|
|
|
|||
|
|
@ -242,7 +242,21 @@ class LogEntryManager(models.Manager):
|
|||
"fields", self._get_applicable_model_fields(instance, model_fields)
|
||||
)
|
||||
|
||||
# safeguard: if fields explicitly set → only use them
|
||||
if "fields" in kwargs:
|
||||
allowed_fields = set(kwargs["fields"])
|
||||
else:
|
||||
allowed_fields = {f.name for f in instance._meta.fields}
|
||||
|
||||
instance_copy = self._get_copy_with_python_typed_fields(instance)
|
||||
|
||||
# drop any deferred field not in allowed_fields
|
||||
for f in instance_copy._meta.fields:
|
||||
if f.name not in allowed_fields and f.name in getattr(
|
||||
instance_copy, "deferred_fields", []
|
||||
):
|
||||
setattr(instance_copy, f.name, None)
|
||||
|
||||
data = dict(
|
||||
json.loads(serializers.serialize("json", (instance_copy,), **kwargs))[0]
|
||||
)
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ from django.db.models import JSONField, Value
|
|||
from django.db.models.functions import Now
|
||||
from django.db.models.signals import pre_save
|
||||
from django.test import RequestFactory, TestCase, TransactionTestCase, override_settings
|
||||
from django.test.utils import isolate_apps
|
||||
from django.urls import resolve, reverse
|
||||
from django.utils import dateformat, formats
|
||||
from django.utils import timezone as django_timezone
|
||||
|
|
@ -137,6 +138,26 @@ class SimpleModelTest(TestCase):
|
|||
msg="Changes string is correct",
|
||||
)
|
||||
|
||||
@isolate_apps("auditlog_tests")
|
||||
def test_deletion_with_deferred_fields_does_not_crash(db):
|
||||
from auditlog.models import LogEntry
|
||||
from auditlog.registry import auditlog
|
||||
|
||||
class Book(models.Model):
|
||||
title = models.CharField(max_length=100)
|
||||
description = models.TextField()
|
||||
|
||||
class Meta:
|
||||
app_label = "auditlog_tests"
|
||||
|
||||
auditlog.register(Book, serialize_data=True)
|
||||
|
||||
b = Book.objects.create(title="foo", description="bar")
|
||||
b = Book.objects.defer("description").get(id=b.id) # defer a field
|
||||
b.delete()
|
||||
|
||||
assert LogEntry.objects.filter(object_pk=b.pk).exists()
|
||||
|
||||
def test_update_specific_field_supplied_via_save_method(self):
|
||||
obj = self.obj
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue