我正在尋找一種在保存ImageField時調整,壓縮和優化上傳圖像的方法。Django如何在使用ImageField保存模型時檢查用戶是否上傳了圖像文件?
class Image(models.Model):
name = models.CharField(max_length=254, blank=True)
caption = models.TextField(max_length=1000, blank=True)
height = models.IntegerField()
width = models.IntegerField()
image = models.ImageField(upload_to='', height_field='height', width_field='width', storage=S3MediaStorage())
我首先想到的是覆蓋模型的save()
和實現這個邏輯,但我不想,如果用戶不更新圖像文件的大小調整/壓縮/優化再次運行(即,如果他只更新現有對象上的name
或caption
並將其保存)。
什麼是正確的方法來檢查時,一個新的圖像文件被上傳到的ImageField,但不是當用戶只在模型中,如改變另一個領域。用戶更新
caption
,但保持原樣?如何在代碼中訪問上傳的圖像文件?即包含可傳遞給Pillow的實際圖像文件的變量是什麼?
編輯:這是從the suspected duplicate獨特。我並不是問該領域是否發生了變化,因爲這總是會導致誤報。我詢問用戶是否上傳了一個圖像文件,我將立即更改(調整大小/優化/壓縮),因此如果用戶立即下載他上傳的圖像,他會發現它具有與隨機生成的文件名不同的二進制文件,以及因此比較文件名或二進制文件不是有效的方法來確定用戶是否正在上傳不同的圖像。
可能重複[Django:保存時,如何檢查字段是否已更改?](http://stackoverflow.com/questions/1355150/django-when-saving-how-can-you-check- if-a-field-has-changed) – rnevius
@rnevius我已經添加了信息來區分這個問題,謝謝 – dtgq