From f2e97e41418788c81ee8e5ab1cec37ecff65a003 Mon Sep 17 00:00:00 2001 From: Jack Cushman Date: Thu, 25 Apr 2019 17:50:08 -0400 Subject: [PATCH] Move patch_save to finalize_class so it works on models with save() methods --- model_utils/tracker.py | 2 +- tests/models.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/model_utils/tracker.py b/model_utils/tracker.py index 6f50d10..5c7c7d8 100644 --- a/model_utils/tracker.py +++ b/model_utils/tracker.py @@ -210,7 +210,6 @@ class FieldTracker(object): def contribute_to_class(self, cls, name): self.name = name self.attname = '_%s' % name - self.patch_save(cls) models.signals.class_prepared.connect(self.finalize_class, sender=cls) def finalize_class(self, sender, **kwargs): @@ -227,6 +226,7 @@ class FieldTracker(object): models.signals.post_init.connect(self.initialize_tracker) self.model_class = sender setattr(sender, self.name, self) + self.patch_save(sender) def initialize_tracker(self, sender, instance, **kwargs): if not isinstance(instance, self.model_class): diff --git a/tests/models.py b/tests/models.py index ef38626..bab9d4b 100644 --- a/tests/models.py +++ b/tests/models.py @@ -238,6 +238,10 @@ class Tracked(models.Model): tracker = FieldTracker() + def save(self, *args, **kwargs): + """ No-op save() to ensure that FieldTracker.patch_save() works. """ + super(Tracked, self).save(*args, **kwargs) + class TrackedFK(models.Model): fk = models.ForeignKey('Tracked', on_delete=models.CASCADE)