Merge pull request #369 from jcushman/patch-save-fix

Move patch_save to finalize_class so it works on models with save() methods
This commit is contained in:
Asif Saif Uddin 2019-05-10 00:41:33 +06:00 committed by GitHub
commit 9eb118ee9e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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)