Создать объект Django с полем FileField с помощью обертки `File` и in-memory-file?

Я пытаюсь создать функциональность в моем приложении, где будет создан In-memory PDF файл и этот файл будет сохранен на FileField в моей Document модели.

Объяснение процесса:


from io import BytesIO
from PyPDF2 import PdfWriter

in_memory_file = BytesIO()
writer = PdfWriter()


writer.add_blank_page(height=200, width=200)
writer.write(in_memory_file)

# The contents of the `writer` got saved to the `io` file 

Для сохранения созданного выше файла мы можем сделать следующее

with open('new_local_file.pdf', 'wb') as local_file:
    local_file.write(in_memory_file.getbuffer())

Приведенный выше код отлично работает в терминале, но поскольку я не могу создавать локальные копии в моем приложении Django, мне приходится делать что-то вроде этого, чтобы сохранить файл

from django.core.files import File

obj = Document.objects.create(file_result=File(in_memory_file.getbuffer()))

Обертка File принимает объект файла python, но все равно приведенный выше код не работает.

После выполнения не создается файл в моем Django Admin

Пожалуйста, прокомментируйте, если вам нужна дополнительная информация.

Если вы хотите сохранить сгенерированный файл в поле модели, вы должны сохранить его в каталоге media, И вы можете сохранить файл по пути:

from django.conf import settings


filename = "document.pdf"
directory = f"{settings.MEDIA_ROOT}/{filename}"
...
# in_memory_file generated here
...
with open(directory, 'wb') as local_file:
    local_file.write(in_memory_file.getbuffer())
obj = Document()
obj.file_result.name = filename
obj.save()
Вернуться на верх