6

私の場合、ユーザーがアバター画像をアップロードし、user_idをファイル名として使用できるようにします。したがって、1.jpg、2.jpgなどがあります。

ただし、すでにアップロードされているアカウント、たとえばユーザー#10に新しいアバターをアップロードすると、新しいファイルの名前は「10_1.jpg」になります。これはOKayですが、私はそれを必要とせず、新しいファイルが古いファイルを上書きする可能性があることを願っています-とにかくディスクスペースを節約します。

グーグルで検索しましたが、手がかりが見つかりませんでした。ImageFieldまたはFileFieldのオプションがあることを期待していましたが、ありません。

手伝ってくれてありがとう!

4

2 に答える 2

14

独自のストレージを定義し、それをFileSystemStorageから継承し、その中のget_available_name関数をオーバーライドする必要があります。このストレージをイメージフィールドに使用します。このようなもの:

class OverwriteStorage(FileSystemStorage):

    def get_available_name(self, name):
        if self.exists(name):
            os.remove(os.path.join(SOME_PATH, name))
        return name

fs = OverwriteStorage(location=SOME_PATH)

class YourModel(models.Model):
    image_file = models.ImageField(storage=fs)
于 2012-02-09T17:47:20.277 に答える
2

上記のMichaelGendinのソリューションは、Django 2.1でうまく機能します(2018年からこんにちは!)。「max_length」属性を「get_available_name」メソッドに追加する必要があるだけです。

def get_available_name(self, name, max_length=None):
于 2018-12-05T08:12:28.957 に答える