gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:32:09 25 4
gpt4 key购买 nike

在我的模型中我有:

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

remote_image 第一次更改时效果很好。

当有人修改了别名上的 remote_image 时,我如何获取新图像?其次,有没有更好的方法来缓存远程图像?

最佳答案

本质上,您想要覆盖 models.Model__init__ 方法,以便保留原始值的副本。这样一来,您就不必再进行一次数据库查找(这总是一件好事)。

    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

关于django - 保存时,如何检查字段是否已更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1355150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com