独自のストレージを定義し、それをFileSystemStorageから継承し、OS_OPEN_FLAGS
クラスの属性とget_available_name()
メソッドをオーバーライドする必要があります。
Djangoバージョン: 3.1
Project / core / files / storages / backends / local.py
import os
from django.core.files.storage import FileSystemStorage
class OverwriteStorage(FileSystemStorage):
"""
FileSystemStorage subclass that allows overwrite the already existing
files.
Be careful using this class, as user-uploaded files will overwrite
already existing files.
"""
OS_OPEN_FLAGS = os.O_WRONLY | os.O_TRUNC | os.O_CREAT | getattr(os, 'O_BINARY', 0)
def get_available_name(self, name, max_length=None):
"""
This method will be called before starting the save process.
"""
return name
モデルでは、カスタムOverwriteStorageを使用します
myapp / models.py
from django.db import models
from core.files.storages.backends.local import OverwriteStorage
class MyModel(models.Model):
my_file = models.FileField(storage=OverwriteStorage())
FileField
。aFileField
が保存されるたびに、ファイルの新しいコピーが作成されます。これを回避するオプションを追加するのはかなり簡単です。