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

前端 未结 25 2161
鱼传尺愫
鱼传尺愫 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:41

    improving @josh answer for all fields:

    class Person(models.Model):
      name = models.CharField()
    
    def __init__(self, *args, **kwargs):
        super(Person, self).__init__(*args, **kwargs)
        self._original_fields = dict([(field.attname, getattr(self, field.attname))
            for field in self._meta.local_fields if not isinstance(field, models.ForeignKey)])
    
    def save(self, *args, **kwargs):
      if self.id:
        for field in self._meta.local_fields:
          if not isinstance(field, models.ForeignKey) and\
            self._original_fields[field.name] != getattr(self, field.name):
            # Do Something    
      super(Person, self).save(*args, **kwargs)
    

    just to clarify, the getattr works to get fields like person.name with strings (i.e. getattr(person, "name")

提交回复
热议问题