When saving, how can you check if a field has changed?

前端 未结 25 2290
鱼传尺愫
鱼传尺愫 2020-11-22 07:15

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          


        
25条回答
  •  感动是毒
    2020-11-22 07:26

    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(Person, self).__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(Person, self).save(force_insert, force_update, *args, **kwargs)
            self.__original_name = self.name
    

提交回复
热议问题