首页 >后端开发 >Python教程 >如何重写 Django 的 Save 方法以进行选择性模型更新?

如何重写 Django 的 Save 方法以进行选择性模型更新?

Linda Hamilton
Linda Hamilton原创
2024-10-22 16:34:031035浏览

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

Django 仅在某些情况下覆盖模型的保存

问题:

保存模型时Django模型,如果添加新图像,则需要调整图像大小。但是,如果仅更新模型的描述,您希望跳过调整大小。

解决方案:

要实现此目的,您可以创建一个充当设置器的自定义属性图像字段和一个标志来指示图像是否已更改。

<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

    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 的伪自动工具(如 ModelForm 和 contrib.admin)的兼容性。

以上是如何重写 Django 的 Save 方法以进行选择性模型更新?的详细内容。更多信息请关注PHP中文网其他相关文章!

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