ImageField
アップロード後にサイズを変更する必要があるモデルがあります。
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
保存が実行される前にその場所にファイルが存在しません。
これを適切に行う方法についての提案はありますか?