Действие администратора Django для загрузки нескольких pdf-файлов

Я пытался сделать пользовательское действие Django admin, которое позволяет мне convert html page to pdf и затем download that pdf, for each object separately if more than once is selected. и поскольку есть только один запрос, который должен быть отправлен, я знаю, что будет только один ответ. Поэтому я попытался поместить эти pdf в zip file и затем загрузить zip... но в конце я вижу corrupted zip file. Не знаю, где проблема

КОД в admin.py

def report_pdf(self, request, queryset):
    from django.template.loader import get_template
    from xhtml2pdf import pisa
    import tempfile
    import zipfile

    with tempfile.SpooledTemporaryFile() as tmp:
            with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as archive:
                for item in enumerate(queryset):
                    context = {"transactions": item}
                    template_path = "test-pdf.html"
                    template = get_template(template_path)
                    html = template.render(context)
                    file = open('test.pdf', "w+b")
                    pisaStatus = pisa.CreatePDF(html.encode('utf-8'), dest=file,
                                                encoding='utf-8')
                    file.seek(0)
                    pdf = file.read()
                    print(pdf)
                    file.close()
                    fileNameInZip = f"{item.chp_reference}.zip"
                    archive.writestr(fileNameInZip, pdf)
                tmp.seek(0)
                response = HttpResponse(tmp.read(), content_type='application/x-zip-compressed')
                response['Content-Disposition'] = 'attachment; filename="pdfs.zip"'
                return response
Вернуться на верх