保存时,如何检查字段是否已更改?

在我的模型中,我有:

类别名(MyBaseModel):
远程\u image=models.URLField(最大\u长度=500,null=True,help\u text=“为图像下载并缓存的URL。仅限
创建别名时使用“)
image=models.ImageField(上传到class=’alias’,default=’alias-default.png’,help_text=“表示别名的图像”)
def保存(自,*参数,**千瓦):
如果(不是self.image或self.image.name==’alias default.png’)和self.remote\u图像:
尝试:
data=utils.fetch(self.remote\u映像)
image=StringIO.StringIO(数据)
图像=图像。打开(图像)
buf=StringIO.StringIO()
image.save(buf,format=’PNG’)
self.image.save(hashlib.md5(self.string_id).hexdigest()+“.png”,ContentFile(buf.getvalue())
除IOError外:
通过

这是远程图像第一次改变,效果非常好

如果有人修改了别名上的远程\u图像,如何获取新图像?第二,有没有更好的方法来缓存远程图像

基本上,您希望覆盖models.Model\uuuu init\uuu方法,以便保留原始值的副本。这使得您不必再进行另一次数据库查找(这总是一件好事)

class-Person(models.Model):
name=models.CharField()
__原始名称=无
定义初始化(self,*args,**kwargs):
super()
self.\uuu原始名称=self.name
def保存(self、force_insert=False、force_update=False、*args、**kwargs):
如果self.name!=self.\uuu原始名称:
#改名-在这里做点什么
super().save(强制插入、强制更新、*args、**kwargs)
self.\uuu原始名称=self.name

发表评论