次の作業例のコードは、ImageField に画像をアップロードするときに、同じ名前のファイルが存在するかどうかを検出し、その場合、新しいファイルを保存する前にそのファイルを削除します。
ファイル名に関係なく古いファイルを削除するように簡単に変更できます。しかし、それは私のプロジェクトで望んでいたことではありません。
次のクラスを追加します。
from django.core.files.storage import FileSystemStorage
class OverwriteStorage(FileSystemStorage):
def _save(self, name, content):
if self.exists(name):
self.delete(name)
return super(OverwriteStorage, self)._save(name, content)
def get_available_name(self, name):
return name
そして、次のように ImageField で使用します。
class MyModel(models.Model):
myfield = models.ImageField(
'description of purpose',
upload_to='folder_name',
storage=OverwriteStorage(), ### using OverwriteStorage here
max_length=500,
null=True,
blank=True,
height_field='height',
width_field='width'
)
height = models.IntegerField(blank=True, null=True)
width = models.IntegerField(blank=True, null=True)