首页  >  文章  >  后端开发  >  如何重写 Django 模型的保存方法以选择性调整图像大小?

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

DDD
DDD原创
2024-10-22 16:26:02174浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn