針對特定情況覆蓋 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中文網其他相關文章!