如何重写 Django 模型的保存方法以选择性调整图像大小?

DDD
发布: 2024-10-22 16:26:02
原创
173 人浏览过

How to Override Django Model's Save Method for Selective Image Resizing?

重写 Django 模型的选择性调整大小的保存方法

问题:

Django 模型如何仅在添加或更新图像时重写 save 方法以调整图像大小,而不是在编辑其他字段时?

问题:

提供的代码调整图像大小每次保存模型时,即使只更新描述。这是低效且不必要的。

解决方案:

建议的解决方案涉及创建一个用作图像字段的 setter 和 getter 的属性。这允许跟踪图像字段的更改,并且仅在修改时调整大小:

<code class="python">class Model(model.Model):
    _image = models.ImageField(upload_to='folder')
    thumb = models.ImageField(upload_to='folder')
    description = models.CharField()

    def set_image(self, val):
        self._image = val
        self._image_changed = True

        # Or put whole logic in here
        small = rescale_image(self.image, width=100, height=100)
        self.image_small = SimpleUploadedFile(name, small_pic)

    def get_image(self):
        return self._image

    image = property(get_image, set_image)

    def save(self, *args, **kwargs):
        if getattr(self, '_image_changed', True):
            small = rescale_image(self.image, width=100, height=100)
            self.image_small = SimpleUploadedFile(name, small_pic)
        super(Model, self).save(*args, **kwargs)</code>
登录后复制

通过使用这种方法,仅在添加或更新图像时才调整大小,有效解决了原始问题中提出的问题.

以上是如何重写 Django 模型的保存方法以选择性调整图像大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!