When saving, how can you check if a field has changed?
django, django-models
Solution
Essentially, you want to override the `__init__` method of `models.Model` so that you keep a copy of the original value. This makes it so that you don't have to do another DB lookup (which is always a good thing).
class Person(models.Model):
name = models.CharField()
__original_name = None
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.__original_name = self.name
def save(self, force_insert=False, force_update=False, *args, **kwargs):
if self.name != self.__original_name:
# name changed - do something here
super().save(force_insert, force_update, *args, **kwargs)
self.__original_name = self.name
Problem
In my model I have : ``` class Alias(MyBaseModel): remote_image = models.URLField( max_length=500, null=True, help_text=''' A URL that is downloaded and cached for the image. Only used when the alias is made ''' ) image = models.ImageField( upload_to='alias', default='alias-default.png', help_text="An image representing the alias" ) def save(self, *args, **kw): if (not self.image or self.image.name == 'alias-default.png') and self.remote_image : try : data = utils.fetch(self.remote_image) image = StringIO.StringIO(data) image = Image.open(image) buf = StringIO.StringIO() image.save(buf, format='PNG') self.image.save( hashlib.md5(self.string_id).hexdigest() + ".png", ContentFile(buf.getvalue()) ) except IOError : pass ``` Which works great for the first time the `remote_image` changes. How can I fetch a new image when someone has modified the `remote_image` on the alias? And secondly, is there a better way to cache a remote image?