上传后获取保存文件(模型)的真实名称 - Django
Get the real name of saved file (Model) after upload - Django
我正在尝试获取 Django 中上传文件的真实名称。事实证明,如果模型中已经存在文件名,Django 将创建另一个名称。
例如,如果 'abc.xls' 在模型数据库中并且我尝试再次上传 'abc.xls',Django 将创建一个名为 'abc_123456.xls' 的文件。这不是问题!
我的问题是:如何在我的 view.py
中获取此名称 ('abc_123456.xls')?
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]
我正在尝试获取 Django 中上传文件的真实名称。事实证明,如果模型中已经存在文件名,Django 将创建另一个名称。
例如,如果 'abc.xls' 在模型数据库中并且我尝试再次上传 'abc.xls',Django 将创建一个名为 'abc_123456.xls' 的文件。这不是问题!
我的问题是:如何在我的 view.py
中获取此名称 ('abc_123456.xls')?
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]