From 0e720f3dcf5111a1ee7d2eca4af06b114cef92ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82?= Date: Sun, 2 Feb 2020 16:10:54 +0100 Subject: [PATCH] Do not create CRUDEvent on update if none of the fields were updated. (#106) --- easyaudit/models.py | 1 - easyaudit/signals/model_signals.py | 2 ++ easyaudit/tests/test_app/tests.py | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/easyaudit/models.py b/easyaudit/models.py index f6575423..da8c870b 100644 --- a/easyaudit/models.py +++ b/easyaudit/models.py @@ -3,7 +3,6 @@ from django.db import models -# Create your models here. class CRUDEvent(models.Model): CREATE = 1 UPDATE = 2 diff --git a/easyaudit/signals/model_signals.py b/easyaudit/signals/model_signals.py index 3eb8bb14..e99de155 100644 --- a/easyaudit/signals/model_signals.py +++ b/easyaudit/signals/model_signals.py @@ -68,6 +68,8 @@ def pre_save(sender, instance, raw, using, update_fields, **kwargs): if not created: old_model = sender.objects.get(pk=instance.pk) delta = model_delta(old_model, instance) + if not delta: + return False changed_fields = json.dumps(delta) event_type = CRUDEvent.UPDATE diff --git a/easyaudit/tests/test_app/tests.py b/easyaudit/tests/test_app/tests.py index 01c7b5d2..bd0ab076 100644 --- a/easyaudit/tests/test_app/tests.py +++ b/easyaudit/tests/test_app/tests.py @@ -50,6 +50,22 @@ def test_m2m_model(self): data = json.loads(crud_event.object_json_repr)[0] self.assertEqual(data['fields']['test_m2m'], [obj.id]) + def test_update(self): + obj = TestModel.objects.create() + crud_event_qs = CRUDEvent.objects.filter(object_id=obj.id, content_type=ContentType.objects.get_for_model(obj)) + self.assertEqual(1, crud_event_qs.count()) + obj.name = 'changed name' + obj.save() + self.assertEqual(2, crud_event_qs.count()) + last_change = crud_event_qs.first() + self.assertIn('name', last_change.changed_fields) + + def test_fake_update(self): + obj = TestModel.objects.create() + crud_event_qs = CRUDEvent.objects.filter(object_id=obj.id, content_type=ContentType.objects.get_for_model(obj)) + obj.save() + self.assertEqual(1, crud_event_qs.count()) + @override_settings(TEST=True) class TestMiddleware(TestCase):