В django изменение имени файла загруженного файла

Можно ли изменить имя файла загруженного файла в django? Я искал, но не нашел ответа.

Мое требование – всякий раз, когда файл загружается, его имя файла должно быть изменено в следующем формате.

format = userid + transaction_uuid + file_extension 

Большое спасибо…

3 Solutions collect form web for “В django изменение имени файла загруженного файла”

Как вы загружаете файл? Я предполагаю, что с FileField .

В документации для FileField.upload_to указано, что поле upload_to ,

также может быть вызываемым, например функцией, которая будет вызываться для получения пути загрузки, включая имя файла. Этот вызываемый должен иметь возможность принимать два аргумента и возвращать путь в стиле Unix (с косой чертой), который должен быть передан вместе с системой хранения. Два аргумента, которые будут переданы, следующие:

« instance »: экземпляр модели, в которой определяется FileField . Более конкретно, это конкретный экземпляр, в котором прикреплен текущий файл.

« filename »: имя файла, которое было первоначально предоставлено файлу. Это может быть или не быть принято во внимание при определении конечного пути назначения.

Таким образом, похоже, вам просто нужно сделать функцию для обработки имен и возврата пути.

 def update_filename(instance, filename): path = "upload/path/" format = instance.userid + instance.transaction_uuid + instance.file_extension return os.path.join(path, format) 

Вы должны иметь FileField с upload_to который вызывает обратный вызов, см. [1]

Ваш обратный вызов должен вызывать метод-оболочку, который получает экземпляр как один из параметров и имени файла, как другой. [2]

Измените его так, как вам нравится, и верните новый путь [3]

1. ЛОГИКА

 FileField(..., upload_to=method_call(params),....) 

2. определить метод

 def method_call(params): return u'abc' 

3. Обертка:

 def wrapper(instance, filename): return method 

это метод рэпера, который вам нужен для получения экземпляра.

 def wrapper(instance, filename): ... Your logic ... return wrapper 

Полный код

 def path_and_rename(path, prefix): def wrapper(instance, filename): ext = filename.split('.')[-1] project = "pid_%s" % (instance.project.id,) # get filename if instance.pk: complaint_id = "cid_%s" % (instance.pk,) filename = '{}.{}.{}.{}'.format(prefix, project, complaint_id, ext) else: # set filename as random string random_id = "rid_%s" % (uuid4().hex,) filename = '{}.{}.{}.{}'.format(prefix, project, random_id, ext) # return the whole path to the file return os.path.join(path, filename) return wrapper 

Вызов метода

 sales_attach = models.FileField("Attachment", upload_to=path_and_rename("complaint_files", 'sales'), max_length=500, help_text="Browse a file") 

Надеюсь это поможет. Благодарю.

если вы хотите, чтобы ваша функция повторно использовалась:

 import hashlib import datetime import os from functools import partial def _update_filename(instance, filename, path): path = path filename = "..." return os.path.join(path, filename) def upload_to(path): return partial(_update_filename, path=path) 

Вам просто нужно использовать его так:

 document = models.FileField(upload_to=upload_to("my/path")) 
  • Передача списка через url в django
  • UserCreationForm показывает ошибку, когда поля пусты
  • Как исправить предупреждение об отсрочке в Django 1.9
  • как настроить собственное промежуточное программное обеспечение в django
  • Вызов специального (не HTTP) URL-адреса из метода form_valid класса Django
  • глобальное имя «запрос» не определено: переопределение form_valid
  • Стандартизованный ответ JSON из представлений
  • Что эквивалентно «none» в шаблонах django?
  • Как сделать бесконечные потоковые комментарии
  • Как указать что-то другое, кроме pk или slug для DetailView
  • Коды языков интернационализации Django
  •  
    Interesting Posts for Van-Lav

    В Java то, что итоматически больше всего похоже на повышение Python ValueError?

    Сплит RSS RSS-строка с использованием Python

    Простой пакет Hello World setuptools и установка его с помощью pip

    Django–django-admin.py на окнах не работает

    Множественный конструктор с Python

    Взаимодействие с скриптом python, выполняющим инфинитивный цикл из Интернета

    Поддержка флеш-почты – получите SSLError при отправке электронной почты

    python-twitter потоковая поддержка api / пример

    Быстрая сортировка многомерного массива

    Используя Python, переверните целое число и сообщите, если палиндром

    Самый чистый способ получить последний элемент из итератора Python

    Есть ли способ связать двоичный файл (например, хромированный) с одним файловым приложением / exe, скомпилированным с помощью Pyinstaller?

    Специальное использование args / kwargs

    Что делает второй аргумент метода Session.pop в Python Flask?

    Отображать специальные символы при использовании оператора печати

    Python - лучший язык программирования в мире.