자체 스토리지를 정의하고 FileSystemStorage에서 상속하고 OS_OPEN_FLAGS
클래스 속성 및 get_available_name()
메서드를 재정의해야 합니다 .
Django 버전 : 3.1
프로젝트 /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
가 저장 될 때마다 파일의 새 사본이 생성됩니다. 이를 방지하는 옵션을 추가하는 것은 매우 간단합니다.