Изменение названия файлов при сохранении

158 0

Работая с разными людьми понял, что требовать от обычного человека загружать файлы на сайт в латинской транслитерации бесполезно.
Все равно загрузят с русскими а порой и со служебными символами.
Поэтому решил наконец поискать не костыльное решение для транслитерации файлов при загрузке в модели.
Выглядит это так:

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

Комментарии

Контактные данные

 Россия, г. Москва