针对特定情况覆盖 Django 模型保存
在 Django 中,模型中的 save() 方法负责将数据持久保存到数据库。但是,在某些情况下,您可能希望根据特定条件修改此行为。其中一种情况是仅在新添加或更新图像时重新缩放图像。
问题:
在包含图像、缩略图和描述字段的模型中,您仅当创建或修改主图像(image)时才需要调整大小并存储缩略图(thumbnail)。更新描述字段不应触发图像大小调整。
解决方案:
要实现此目的,您可以使用检查的自定义属性覆盖默认的 save() 方法对于图像字段中的更改:
<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.thumb = SimpleUploadedFile(name, small_pic) super(Model, self).save(*args, **kwargs)</code>
工作原理:
以上是何时覆盖 Django 模型保存以调整图像大小的详细内容。更多信息请关注PHP中文网其他相关文章!