diff --git a/auditlog/mixins.py b/auditlog/mixins.py index 672ee40..d2e315e 100644 --- a/auditlog/mixins.py +++ b/auditlog/mixins.py @@ -62,16 +62,26 @@ class LogEntryAdminMixin(object): if obj.action == LogEntry.Action.DELETE: return "" # delete changes = json.loads(obj.changes) - msg = "" - for i, field in enumerate(sorted(changes), 1): - value = [i, field] + ( - ["***", "***"] if field == "password" else changes[field] - ) - msg += format_html( - "", *value - ) - msg += "
#FieldFromTo
{}{}{}{}
" - return mark_safe(msg) + msg = [] + + msg.append("") + msg.append(self._format_header("#", "Field", "From", "To")) + for i, (field, change) in enumerate(sorted(changes.items()), 1): + value = [i, field] + (["***", "***"] if field == "password" else change) + msg.append(self._format_line(*value)) + msg.append("
") + + return mark_safe("".join(msg)) msg.short_description = "Changes" + + def _format_header(self, *labels): + return format_html( + "".join(["", "{}" * len(labels), ""]), *labels + ) + + def _format_line(self, *values): + return format_html( + "".join(["", "{}" * len(values), ""]), *values + )