1

画像を Django ImageField にアップロードする必要がありますが、サードパーティ API に基づく制限により、画像をサブディレクトリなしでメディア ディレクトリにアップロードする必要があります。

この制限は、メディア API からその画像をリクエストするためのハッシュを計算するためにローカルに (imagefield 列に) 保存されたファイル名が使用されるため、フィールドには API のファイル名と同じ名前が含まれている必要がありますが、残念ながら、 API ファイル名にスラッシュを含めることはできません。

実際のファイル名を格納するためにデータベースにフィールドを追加することも、計算されたハッシュを返すコードを制御することもできません。

私はupload_toを空の文字列を返すcallableにしようとしましたが、これはupload_toに必要なエラーを回避しているようですが、画像はすべて「(空白)_1、_2 ...などとして残りの画像なしで保存されます名前。

また、upload_to が '/'、'../media'、'../media/' をすべて無駄に返すようにしようとしました (さまざまなエラーまたは不正な形式のファイル名)。

TL;DRサブディレクトリなしでMEDIA_ROOTに直接画像を保存する方法は?

編集、追加情報:

だから私はそれの一部を行う小さなハックを試しました:

from django.core.files.storage import FileSystemStorage

media_root_store = FileSystemStorage(location='/path/to/media/parent')

class MyModel(models.Model):
    img_file = models.ImageField(
        max_length=255,
        upload_to='media',
        storage=media_root_store)

この汚いハックは画像​​を正しい場所に保存しますが、メディア/ を追加して画像パスを保存することは明らかです。だから、それが実際に私を近づけたかどうかはわかりません。

4

1 に答える 1