Работая с разными людьми понял, что требовать от обычного человека загружать файлы на сайт в латинской транслитерации бесполезно.
Все равно загрузят с русскими а порой и со служебными символами.
Поэтому решил наконец поискать не костыльное решение для транслитерации файлов при загрузке в модели.
Выглядит это так:
1. Создаем где-нибудь в проекте модуль утилит в который пишем две функции:
def transliterate(name):
symbol_dict = {
"А": "a",
"Б": "b",
"В": "v",
"Г": "g",
"Д": "d",
"Е": "e",
"Ё": "yo",
...
}
for i, j in symbol_dict.items():
name = name.replace(i, j)
return name
def get_upload_to(upload_to):
def translit(instance, filename):
name, ext = os.path.splitext(filename)
new_name = transliterate(name)
return f'{upload_to}/{new_name}{ext}'
return translit
2. В модулях моделей делаем так:
from .utils import get_upload_to
clacc MyModel(models.Model):
...
photo = models.ImageField('Фото', upload_to=get_upload_to('photos'))
...
Источник: forum.djangoproject.com
Комментарии