何時覆蓋 Django 模型保存以調整影像大小

Mary-Kate Olsen
發布: 2024-10-22 21:09:03
原創
409 人瀏覽過

When to Override Django Model Saving for Image Resizing

針對特定情況覆蓋 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>
登入後複製

工作原理:

  • set_image() 方法更新_image 欄位並將標誌_image_changed 設為True。
  • get_image() 方法傳回 _image 欄位的目前值。
  • image 屬性包裝了 set_image() 和 get_image() 方法以提供一致的介面。
  • 在重寫的 save() 方法中,檢查 _image_changed 標誌。如果為 True,則表示影像已變更或新增。
  • 在這種情況下,縮圖會重新縮放。
  • 呼叫 super() 方法將模型儲存到資料庫中重新縮放的縮圖(如有必要)和更新的描述。

以上是何時覆蓋 Django 模型保存以調整影像大小的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!