คุณควรกำหนดที่เก็บข้อมูลของคุณเองสืบทอดจาก FileSystemStorage และแทนที่OS_OPEN_FLAGS
คลาสแอตทริบิวต์และget_available_name()
วิธีการ:
Django เวอร์ชัน: 3.1.2
โครงการ / 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
subclassing เมื่อใดก็ตามที่FileField
บันทึกไฟล์สำเนาใหม่จะถูกสร้างขึ้น การเพิ่มตัวเลือกเพื่อหลีกเลี่ยงปัญหานี้ค่อนข้างตรงไปตรงมา