FileField PDF не открывается Django - PullRequest
0 голосов
/ 17 марта 2020

Я создаю и сохраняю PDF как таковой в моих представлениях:

views.py

@login_required(login_url="/login")
def PackingListView(request):
    if request.method == "POST":
        form = PackingListForm(request.POST)
        if form.is_valid():
            if 'preview' in request.POST:
                ...

            elif 'save' in request.POST:
                pdf_contents = form
                file = ContentFile(pdf_contents)

                item = PackingListDocuments.objects.get(pk=1)

                item.PackingListDocument.save('test.pdf', file) #saving as FileField in model


                form.save()
                messages.success(request, "Success: Packing List Has Been Created!")
                return redirect('HomeView')

Я вижу, что test.pdf сохранен. Я могу видеть это в моем файловом проводнике так же как в администраторе, но каждый раз, когда я пытаюсь открыть его, файл кажется поврежденным. Что мне нужно добавить или вычесть в моем коде, чтобы это работало?

Спасибо!

ОБНОВЛЕНИЕ:

Я изменил строку: file = ContentFile(pdf_contents) на file = File(pdf_contents)

Но теперь я получаю сообщение об ошибке атрибута, что у объекта 'PackingListForm' нет атрибута 'read'

1 Ответ

0 голосов
/ 17 марта 2020

Я считаю, что ошибка должна быть связана с этой строкой

file = ContentFile(pdf_contents)

Обратите внимание, что из документов

Класс ContentFile наследуется от File, но в отличие от File он работает со строковым содержимым (байты также поддерживаются), а не с реальным файлом. Например:

Поэтому я предполагаю, что вы не передаете строковый / байтовый тип в качестве аргумента объекту ContenetFile.

Попробуйте найти его тип. Вы также можете преобразовать его в строковый тип, выполнив String(pdf_contents).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...