Получение реального имени сохраненного файла (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]
Вернуться на верх