Move patch_save to finalize_class so it works on models with save() methods

This commit is contained in:
Jack Cushman 2019-04-25 17:50:08 -04:00
parent d557c42533
commit f2e97e4141
2 changed files with 5 additions and 1 deletions

View file

@ -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):

View file

@ -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)