Поведение по умолчанию класса Storage
Джанго состоит в добавлении серии случайных символов в конец имени файла, когда имя файла уже существует.Если вы хотите контролировать, какие символы добавляются, вы можете создать свой собственный подкласс Storage
и переопределить функцию get_available_name()
.
Очень простой пример, который добавляет фиксированный набор символов в конецимя (вам может потребоваться адаптировать его к различным символам):
import os
from django.core.files.storage import FileSystemStorage
class MyStorage(FileSystemStorage):
def get_available_name(self, name, max_length=None):
if self.exists(name):
dir_name, file_name = os.path.split(name)
file_root, file_ext = os.path.splitext(file_name)
my_chars = 'abcde' # The characters you want to append
name = os.path.join(dir_name, '{}_{}{}'.format(file_root, my_chars, file_ext))
return name
Затем вы можете указать пользовательский класс хранения для модели:
class UpLoadFile(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
file = models.FileField(storage=MyStorage()) # Your custom storage
...
Также стоит посмотреть на существующиекод для Джанго get_available_name()
.