Получение реального имени сохраненного файла (Model) после загрузки - Django
Я пытаюсь получить настоящее имя загруженного файла в Django. Получается, что если имя файла уже существует внутри Модели, то Django создаст другое имя aleatory.
Например, если 'abc.xls' находится внутри базы данных Model, и я пытаюсь загрузить 'abc.xls' снова, Django создаст файл под названием 'abc_123456.xls'. Но проблема не в этом!
Мой вопрос: как я могу получить это имя ('abc_123456.xls') внутри моего view.py
?
def index(request):
if 'GET' == request.method:
form = DocumentForm()
return render(request, 'auditoria_app/index.html', {'form': form})
else:
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
form.save()
# I'd like to get the correct file name here!
mediaFolder = settings.MEDIA_ROOT
fileName = f"{mediaFolder}/SAE/{form.cleaned_data['file'].get_alternative_name}" # .xlsm (Excel file)
splitFileName = fileName.split('.')
zipFileName = f"{splitFileName[0]}.zip" # .zip
Моя модель:
from django.db import models
from django.core.validators import FileExtensionValidator
class Document(models.Model):
file = models.FileField(upload_to='SAE/')
uploaded_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.file)
Вы можете получить его из файла с помощью атрибута name
. Bu дает вам имя файла с присоединенным MEDIA_ROOT. Вы можете извлечь MEDIA_ROOT из этого атрибута. Также вы можете получить объект, когда form.save(commit=False)
Попробуйте следующее:
def index(request):
if 'GET' == request.method:
form = DocumentForm()
return render(request, 'auditoria_app/index.html', {'form': form})
else:
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
document = form.save(commit=False)
document.save()
# you can get file_name like this
file_name = document.file.name.split('/')[-1]