хоть вопрос и старый, всё равно оставлю тут свой вариант ответа - мало ли кому пригодится
Объявляется вот такой класс в качестве хранилища файлов
import unicodedata2
import pytils
from django.core.files.storage import FileSystemStorage
class ASCIIFileSystemStorage(FileSystemStorage):
"""
Для автоматической транслитерации всех загружаемых файлов
"""
def get_valid_name(self, name):
name_parts = name.split('.')
name = unicodedata2.normalize('NFKD', pytils.translit.slugify(name_parts[0])).encode('ascii', 'ignore').decode('utf-8')
name = '{}.{}'.format(name, name_parts[-1])
return super(ASCIIFileSystemStorage, self).get_valid_name(name)
и указывается в settings в качестве DEFAULT_FILE_STORAGE
по поводу формирования имени можно конечно ещё пообсуждать на предмет наличия более чем одной точки в имени файла и сделать чуть более красиво, но в целом это уже решает основную проблему