From b906bc6fedd08af004f75bcf076166e8621ad092 Mon Sep 17 00:00:00 2001 From: Andrea Cesari Date: Tue, 29 Nov 2022 11:33:53 +0100 Subject: [PATCH 1/4] fix changes_display_dict to display added/deleted objects for m2m log changes --- auditlog/models.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/auditlog/models.py b/auditlog/models.py index e073c882..ac968ab7 100644 --- a/auditlog/models.py +++ b/auditlog/models.py @@ -464,6 +464,16 @@ def changes_display_dict(self): except AttributeError: # if the field is a relationship it has no internal type and exclude it continue + + if field_type == "ManyToManyField": + values_display = values + values_display['objects'] = [f"{i[:140]}..." if len(i) >140 else i for i in values['objects'] ] + verbose_name = model_fields["mapping_fields"].get( + field.name, getattr(field, "verbose_name", field.name) + ) + changes_display_dict[verbose_name] = values_display + continue + for value in values: # handle case where field is a datetime, date, or time type if field_type in ["DateTimeField", "DateField", "TimeField"]: From 6403f3423beb51c4fcacc0134bb415cb1b5d70fb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 29 Nov 2022 10:43:10 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- auditlog/models.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/auditlog/models.py b/auditlog/models.py index ac968ab7..cda2e39e 100644 --- a/auditlog/models.py +++ b/auditlog/models.py @@ -464,10 +464,13 @@ def changes_display_dict(self): except AttributeError: # if the field is a relationship it has no internal type and exclude it continue - + if field_type == "ManyToManyField": values_display = values - values_display['objects'] = [f"{i[:140]}..." if len(i) >140 else i for i in values['objects'] ] + values_display["objects"] = [ + f"{i[:140]}..." if len(i) > 140 else i + for i in values["objects"] + ] verbose_name = model_fields["mapping_fields"].get( field.name, getattr(field, "verbose_name", field.name) ) From 41876908147714b54d7bb5c40c0c7719c13ca170 Mon Sep 17 00:00:00 2001 From: Andrea Cesari Date: Mon, 9 Jan 2023 10:35:53 +0100 Subject: [PATCH 3/4] use truncator for string > 140 chars. Needed to nicely close html tags --- auditlog/models.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/auditlog/models.py b/auditlog/models.py index ac968ab7..0ca65b5a 100644 --- a/auditlog/models.py +++ b/auditlog/models.py @@ -16,6 +16,7 @@ from django.utils import formats from django.utils.encoding import smart_str from django.utils.translation import gettext_lazy as _ +from django.utils.text import Truncator from auditlog.diff import mask_str @@ -467,7 +468,7 @@ def changes_display_dict(self): if field_type == "ManyToManyField": values_display = values - values_display['objects'] = [f"{i[:140]}..." if len(i) >140 else i for i in values['objects'] ] + values_display['objects'] = [f"{Truncator(i).chars(140,html=True)}..." if len(i) >140 else i for i in values['objects'] ] verbose_name = model_fields["mapping_fields"].get( field.name, getattr(field, "verbose_name", field.name) ) @@ -491,7 +492,8 @@ def changes_display_dict(self): pass # check if length is longer than 140 and truncate with ellipsis if len(value) > 140: - value = f"{value[:140]}..." + #value = f"{value[:140]}..." + value=f"{Truncator(value).chars(140,html=True)}..." values_display.append(value) verbose_name = model_fields["mapping_fields"].get( From 7bf1798e557260e9f3c05349b38bd77b19d97540 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 9 Jan 2023 09:37:44 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- auditlog/models.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/auditlog/models.py b/auditlog/models.py index 468b60ba..2c160d75 100644 --- a/auditlog/models.py +++ b/auditlog/models.py @@ -15,8 +15,8 @@ from django.db.models import Q, QuerySet from django.utils import formats from django.utils.encoding import smart_str -from django.utils.translation import gettext_lazy as _ from django.utils.text import Truncator +from django.utils.translation import gettext_lazy as _ from auditlog.diff import mask_str @@ -468,7 +468,10 @@ def changes_display_dict(self): if field_type == "ManyToManyField": values_display = values - values_display['objects'] = [f"{Truncator(i).chars(140,html=True)}..." if len(i) >140 else i for i in values['objects'] ] + values_display["objects"] = [ + f"{Truncator(i).chars(140,html=True)}..." if len(i) > 140 else i + for i in values["objects"] + ] verbose_name = model_fields["mapping_fields"].get( field.name, getattr(field, "verbose_name", field.name) ) @@ -492,8 +495,8 @@ def changes_display_dict(self): pass # check if length is longer than 140 and truncate with ellipsis if len(value) > 140: - #value = f"{value[:140]}..." - value=f"{Truncator(value).chars(140,html=True)}..." + # value = f"{value[:140]}..." + value = f"{Truncator(value).chars(140,html=True)}..." values_display.append(value) verbose_name = model_fields["mapping_fields"].get(