ImageField を含むモデルがあります。私はすでにupload_toを設定し、独自のFileSystemStorageクラスを作成して、ファイルを一意の名前で保存することに対処しています...しかし...
このセットアップにより、ファイルごとに一意の名前でファイルをアップロードして保存できます (これで問題ありません) が、以前に存在したファイルを削除する必要もあります。
file1.png をアップロードすると、file1_xkdeujg.png として保存されます (これはランダムな文字列です)。
次に、django admin に移動し (django admin インターフェイスを使用するため、モデルを介して行う必要があります)、そのフィールドの画像を fileNEW.png に変更します。
今必要なことは次のとおりです。
1)新しいファイルをfileNEW_fjewiejk.png(画像が保存されるたびに一意のランダム文字列)として保存します-完了
2) 新しいファイルをデータベースに保存します -完了
3)古いファイルを削除します-file1_xkdeuig.png-ファイルシステムから-未完了
Q: ポイント 3 を手伝ってくれる人はいますか?
いくつかのコード:
class Page(models.Model):
image = models.ImageField(upload_to='pages/', storage=MyFileSystemStorage())
そして(このコードの大部分を他の場所から借りました...):
class MyFileSystemStorage(FileSystemStorage):
def get_valid_name(self, name):
file_root, file_ext = os.path.splitext(name)
return "%s_%s%s" % (file_root, rand_key(8), file_ext)
def get_available_name(self, name):
dir_name, file_name = os.path.split(name)
file_root, file_ext = os.path.splitext(file_name)
count = itertools.count(1)
while self.exists(name):
name = os.path.join(dir_name, "%s_%s%s" % (rand_key(32), count.next(), file_ext))
return name