1. ホーム
  2. python

[解決済み] Django の FileField に既存のファイルを設定する

2022-11-12 11:23:47

質問

ディスク上に既存のファイル (例えば /folder/file.txt) があり、Django の FileField モデルフィールドがあります。

を実行すると

instance.field = File(file('/folder/file.txt'))
instance.save()

という名前で再保存されます。 file_1.txt (として保存します(次回は _2 など)。

私は、フィールドに関連づけたいファイルが本当にそこにあって私を待っていることを知っていますし、Django がそれを指すようにしたいだけなのです。

どのようにですか?

どのように解決するのですか?

これを恒久的に行いたい場合は、独自の FileStorage クラスを作成する必要があります。

import os
from django.conf import settings
from django.core.files.storage import FileSystemStorage

class MyFileStorage(FileSystemStorage):

    # This method is actually defined in Storage
    def get_available_name(self, name):
        if self.exists(name):
            os.remove(os.path.join(settings.MEDIA_ROOT, name))
        return name # simply returns the name passed

今度はモデルで、変更したMyFileStorageを使用します。

from mystuff.customs import MyFileStorage

mfs = MyFileStorage()

class SomeModel(model.Model):
   my_file = model.FileField(storage=mfs)