Сохранение визуализированного файла PDF в поле модели Django - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь сохранить файл PDF, который отображается с использованием HTML, в поле модели прямо сейчас, он выдает эту ошибку.

приведение к Unicode: нужна строка или буфер, экземпляр найден

это код

def save_to_pdf(template_src, context_dict, pk):
    import ipdb; ipdb.set_trace()
    instance = get_object_or_404(
        Project.objects.filter(pk=pk, is_deleted=False))
    template = get_template(template_src)
    context = Context(context_dict)
    html  = template.render(context)
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result,link_callback=fetch_resources)
    pdfnew=file(pdf)
    instance.structural_info.save('structure.pdf',pdfnew)
    return True

Structure_info - это поле файла. Как правильно это сделать?

1 Ответ

0 голосов
/ 05 сентября 2018

Если вы посмотрите документацию API :

Обратите внимание, что аргумент содержимого должен быть экземпляром django.core.files.File, а не встроенный файловый объект Python. Вы можете создать файл из существующего объекта файла Python, как это

from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/path/to/hello.world')
myfile = File(f)

, поэтому, если pdf - строка, которую вы можете использовать:

from django.core.files.base import ContentFile
myfile = ContentFile(pdf)
instance.structural_info.save('structure.pdf', myfile)
...