diff --git a/auditlog/models.py b/auditlog/models.py index 9ec3bfa..01b54a0 100644 --- a/auditlog/models.py +++ b/auditlog/models.py @@ -455,9 +455,17 @@ class LogEntry(models.Model): if auditlog.contains(model._meta.model): model_fields = auditlog.get_model_fields(model._meta.model) + if settings.AUDITLOG_STORE_JSON_CHANGES: + changes_dict = {} + for field_name, values in self.changes_dict.items(): + values_as_strings = [str(v) for v in values] + changes_dict[field_name] = values_as_strings + else: + changes_dict = self.changes_dict + changes_display_dict = {} # grab the changes_dict and iterate through - for field_name, values in self.changes_dict.items(): + for field_name, values in changes_dict.items(): # try to get the field attribute on the model try: field = model._meta.get_field(field_name) diff --git a/auditlog_tests/tests.py b/auditlog_tests/tests.py index d8988d8..f3056bc 100644 --- a/auditlog_tests/tests.py +++ b/auditlog_tests/tests.py @@ -798,6 +798,57 @@ class SimpleMappingModelTest(TestCase): ), ) + @override_settings(AUDITLOG_STORE_JSON_CHANGES=True) + def test_changes_display_dict_with_json_changes_and_simplemodel(self): + sm = SimpleModel(integer=37, text="my simple model instance") + sm.save() + self.assertEqual( + sm.history.latest().changes_display_dict["integer"][1], + "37", + ) + self.assertEqual( + sm.history.latest().changes_display_dict["text"][1], + "my simple model instance", + ) + + @override_settings(AUDITLOG_STORE_JSON_CHANGES=True) + def test_register_mapping_fields_with_json_changes(self): + smm = SimpleMappingModel( + sku="ASD301301A6", vtxt="2.1.5", not_mapped="Not mapped" + ) + smm.save() + self.assertEqual( + smm.history.latest().changes_dict["sku"][1], + "ASD301301A6", + msg="The diff function retains 'sku' and can be retrieved.", + ) + self.assertEqual( + smm.history.latest().changes_dict["not_mapped"][1], + "Not mapped", + msg="The diff function does not map 'not_mapped' and can be retrieved.", + ) + self.assertEqual( + smm.history.latest().changes_display_dict["Product No."][1], + "ASD301301A6", + msg="The diff function maps 'sku' as 'Product No.' and can be retrieved.", + ) + self.assertEqual( + smm.history.latest().changes_display_dict["Version"][1], + "2.1.5", + msg=( + "The diff function maps 'vtxt' as 'Version' through verbose_name" + " setting on the model field and can be retrieved." + ), + ) + self.assertEqual( + smm.history.latest().changes_display_dict["not mapped"][1], + "Not mapped", + msg=( + "The diff function uses the django default verbose name for 'not_mapped'" + " and can be retrieved." + ), + ) + class SimpleMaskedFieldsModelTest(TestCase): """Log masked changes for fields in mask_fields"""