Django创建临时文件下载



我有一个名为ReportData的模型。我有一个表单,它将获得"report_name"并执行操作。此操作基本上在对象中循环,返回的每个对象都有一个文件字段,该字段有一个".docx"文件,此函数将所有这些文件合并为一个docx文件。

之后,convert()方法将"docx"转换为"pdf"。我可以执行这个工作流程,但我需要在媒体目录中创建一个临时文件,而不是真正的文件。我基于类的观点如下:

class FilesListView(LoginRequiredMixin,ListView):
model = ReportData
template_name = 'report/myfiles.html'
context_object_name = 'reportdata'
def get_queryset(self):
return ReportData.objects.filter(preparedby=self.request.user).order_by('-date_created')
def post(self,request,*args,**kwargs):
filtervalue = request.POST.get("report_name","")
reportsforPDF = ReportData.objects.filter(reportname=filtervalue)
reporturl = settings.MEDIA_ROOT[0:-6]
master = Document(reporturl + reportsforPDF.first().document.url)
composer = Composer(master)
i=0
for object in reportsforPDF:
if i>0:
doc = Document(reporturl + object.document.url)
composer.append(doc)
i+=1
storage = settings.MEDIA_ROOT + '/merged/{}.docx'.format(filtervalue)
composer.save(storage)
pythoncom.CoInitialize()
convert(settings.MEDIA_ROOT + '/merged/{}.docx'.format(filtervalue))
context = {
'pdf_url': '/media/merged/{}.pdf'.format(filtervalue)
}
return render(request, 'report/myfiles.html', context=context)

此外,由于当前代码不返回对象,我如何在post函数中使用get_queryset

您可以使用tempfile模块

以下是一个基本示例:

import os
f = tempfile.TemporaryFile()
f.write("Hello World")
f.seek(os.SEEK_SET)
# Do something
f.read()
# Do something
f.close() # Deletes

您可以在post方法中使用以下行:_queryset = self.get_queryset()

最新更新