在Django 中的非圖像字段更改時跳過圖像大小調整
保存Django 模型時,可能只需要執行某些操作當特定字段發生變更時。如果存在圖像字段,用戶可能希望在上傳或更新圖像時調整圖像大小,但在僅修改其他字段(例如描述)時跳過該過程。
問題:
在提供的 Django 模型中,無論影像本身是否已更改,save() 方法都會執行影像重新縮放。這種方法效率低下,會導致不必要的計算。
使用自訂屬性和 Setter 的解決方案:
一種解決方案是引入具有 setter 的自訂屬性來控制影像調整大小。以下是一個範例:
<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 if self._image_changed: # Perform image rescaling logic here, if necessary pass def get_image(self): return self._image image = property(get_image, set_image) def save(self, *args, **kwargs): if getattr(self, '_image_changed', True): super(Model, self).save(*args, **kwargs) # Perform image rescaling logic here (if implemented in `set_image`)</code>
此方法利用名為 image 的自訂屬性,該屬性充當名為 _image 的實際影像欄位的包裝器。 set_image() 方法用於為 _image 欄位指派新值,並將 _image_changed 標誌設為 True。 _image_changed 標誌用於確定影像是否需要重新縮放。
在 save() 方法中,程式檢查 _image_changed 的值。如果為 True,則假定影像欄位已變更並繼續執行影像重新縮放邏輯。如果_image_changed為False,則表示影像欄位沒有改變,程式會跳過圖片縮放步驟。
以上是Django 模型可以利用自訂屬性來跳過非圖像欄位變更時的圖像大小調整嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!