1
我有一個模型包含ImageField
應該在上傳後調整大小。ImageField調整大小保存也更新width_field和height_field
class SomeModel(models.Model):
banner = ImageField(upload_to='uploaded_images',
width_field='banner_width',
height_field='banner_height')
banner_width = models.PositiveIntegerField(_('banner width'), editable=False)
banner_height = models.PositiveIntegerField(_('banner height'), editable=False)
def save(self, *args, **kwargs):
super(SomeModel, self).save(*args, **kwargs)
resize_image(filename=self.banner.path,
width=MAX_BANNER_WIDTH,
height=MAX_BANNER_HEIGHT)
resize_image
是一個自定義函數做調整大小,和一切工作正常,除了banner_width和banner_height被填充了原始圖像的尺寸,調整前。
調整大小的圖像的實際尺寸可能小於給定的MAX值,所以我必須打開調整大小的文件以在調整大小後檢查它的實際尺寸。然後我可以手動設置banner_width
和banner_height
,並再次保存,但這不是有效的方法。 我也可以先調整大小,設置寬度和高度字段,然後保存,但在執行保存之前,位置self.banner.path
處的文件不存在。
有關如何正確完成此任務的任何建議?
你可以發佈resize_image方法的內容嗎?看起來你可以使用一些邏輯確定圖像的最終大小,在保存之前設置banner_width和banner_height屬性,除非在該方法中發生了某些魔術。 – 2012-03-07 22:39:33
@CaseyKinsey我最近更新了這個函數來返回調整大小的圖像,現在在'save'方法中,我首先調用'super(SomeModel,self).save()'然後執行'resize_image()',更新'banner_width'和' banner_height',最後再次調用'super(SomeModel,self).save()'。它的工作原理,雖然我想避免兩次保存模型實例。 – Dzejkob 2012-03-08 09:11:08