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