首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django检测到具有相同文件名的更改的ImageField

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

Stack Overflow用户
提问于 2012-09-17 22:10:20
回答 1查看 1.1K关注 0票数 3

我正在尝试检测ImageField的更改,以便通过编程将更改与Hg同步。包含ImageField的模型是使用Django-multilingual进行本地化的,所以我必须单独检测每个字段的更改,而不是假设每次都更改文件。

我使用pre和post save信号来实现这一点,在pre-save中保存实例,并在post-save中检测字段值的变化。这对于添加、删除或使用不同文件名的图像进行更改时非常有用。然而,当我上传具有相同文件名的图像时,我的代码无法检测到图像实际发生了更改,因此没有文件更改与Hg同步。

我希望能够为旧文件生成校验和(很容易做到,因为我知道它在presave实例中的位置),并将其与新文件的校验和进行比较(不是那么简单,因为尝试从字段值中取出它会将我带到旧文件)。

如果有一种方法可以让我找到新上传的文件(大概在内存中,因为Django不会临时保存2.5MB以下的文件),并将其保存到一个临时目录中,那么我将很容易为它生成一个校验和。然而,我不确定我将从哪里获得该文件。

在post_save信号期间,我可以从哪里获取文件?或者,有没有其他我还没有想过的实现这种变化检测的方法?

谢谢你,瑞奇

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-01 19:33:40

添加此代码段“

代码语言:javascript
复制
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

然后在你的保存中

代码语言:javascript
复制
def save(self, *args, **kwargs):
            if has_changed(self, 'field_here'):

            super(Sneetch, self).save(*args, **kwargs)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12461100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档