È necessario definire il proprio archivio, ereditarlo da FileSystemStorage e sovrascrivere l' OS_OPEN_FLAGSattributo e il get_available_name()metodo di classe :
Versione Django: 3.1.0
Progetto / core / file / archivi / backend / 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
Nel tuo modello, usa il tuo OverwriteStorage personalizzato
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. Ogni volta cheFileFieldviene salvato un, viene creata una nuova copia del file. Sarebbe abbastanza semplice aggiungere un'opzione per evitarlo.