gpt4 book ai didi

Django 检测到具有相同文件名的已更改 ImageField

转载 作者:行者123 更新时间:2023-12-04 03:05:31 24 4
gpt4 key购买 nike

我正在尝试检测对 ImageField 的更改,以便以编程方式将更改与 Hg 同步。包含 ImageField 的模型正在使用 Django 多语言进行本地化,因此我必须单独检测每个字段的更改,而不是假设文件每次都更改。

我正在使用保存前和保存后信号来完成此操作,在保存前保存实例并在保存后检测字段值的变化。这在添加、删除或更改具有不同文件名的图像时非常有用。但是,当我上传具有相同文件名的图像时,我的代码无法检测到图像实际上已更改,因此没有文件更改与 Hg 同步。

我希望能够为旧文件生成一个校验和(很容易完成,因为我知道它来自预保存实例的位置),并将其与新文件的校验和进行比较(不像尝试拉取那样容易它从字段值中带我到旧文件)。

如果我有办法找到新上传的文件(可能是在内存中,因为 Django 不会临时保存 2.5MB 以下的文件),并将其保存到临时目录,我可以很容易地生成一个它的校验和。但是,我不确定从哪里获取文件。

在 post_save 信号期间我可以从哪里获取文件?还是有其他我没有想到的方法来完成这种变化检测?

谢谢,丰富

最佳答案

添加此代码段“

def has_changed(instance, field):
if not instance.pk:
return False
old_value = instance.__class__._default_manager.\
filter(pk=instance.pk).values(field).get()[field]
return not getattr(instance, field) == old_value

然后在你的存档中

def save(self, *args, **kwargs):
if has_changed(self, 'field_here'):

super(Sneetch, self).save(*args, **kwargs)

关于Django 检测到具有相同文件名的已更改 ImageField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461100/

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