Attempt to change LogEntry.changes encoder to make 's usage okay

This commit is contained in:
hjisaac 2024-02-22 03:31:01 +00:00
parent ac720cd30e
commit e46738b75c
2 changed files with 18 additions and 1 deletions

16
auditlog/encoder.py Normal file
View file

@ -0,0 +1,16 @@
from django.core.serializers.json import DjangoJSONEncoder
from decimal import Decimal
AUDITLOG_BUGGY_REPR_DATATYPES = (Decimal,)
class AuditLogChangesJSONEncoder(DjangoJSONEncoder):
def default(self, obj):
if isinstance(obj, list) and obj:
return [
str(o) if isinstance(o, AUDITLOG_BUGGY_REPR_DATATYPES) else o
for o in obj
]
return super().default(obj)

View file

@ -24,6 +24,7 @@ from django.utils.encoding import smart_str
from django.utils.translation import gettext_lazy as _
from auditlog.diff import mask_str
from auditlog.encoder import AuditLogChangesJSONEncoder
DEFAULT_OBJECT_REPR = "<error forming object repr>"
@ -350,7 +351,7 @@ class LogEntry(models.Model):
choices=Action.choices, verbose_name=_("action"), db_index=True
)
changes_text = models.TextField(blank=True, verbose_name=_("change message"))
changes = models.JSONField(null=True, verbose_name=_("change message"))
changes = models.JSONField(null=True, verbose_name=_("change message"), encoder=AuditLogChangesJSONEncoder)
actor = models.ForeignKey(
to=settings.AUTH_USER_MODEL,
on_delete=models.SET_NULL,