Сохранение файла из FileResponse в Django

Как сохранить файл в поле FileField из FileResponse в Django.

У меня есть простейшая функция для создания PDF файла в Django (согласно документации).

import io
from django.http import FileResponse
from reportlab.pdfgen import canvas

def some_view(request):
    # Create a file-like buffer to receive PDF data.
    buffer = io.BytesIO()

    # Create the PDF object, using the buffer as its "file."
    p = canvas.Canvas(buffer)

    # Draw things on the PDF. Here's where the PDF generation happens.
    # See the ReportLab documentation for the full list of functionality.
    p.drawString(100, 100, "Hello world.")

    # Close the PDF object cleanly, and we're done.
    p.showPage()
    p.save()

    # FileResponse sets the Content-Disposition header so that browsers
    # present the option to save the file.
    buffer.seek(0)
    return FileResponse(buffer, as_attachment=True, filename='hello.pdf')

Выдает PDF. Но как сохранить этот PDF в FileField?

Мне нужно что-то вроде этого:

Models.py

class FileModel(models.Model):
    file = models.FileField()

Views.py

def some_view(request):
    [...same code as above to line buffer.seek(0)...]
    obj = FileModel()
    obj.file = FileResponse(buffer, as_attachment=True, filename='hello.pdf')
    obj.save()

Для этой задачи Django предоставляет объект-обертку File:

from django.core.files import File

def some_view(request):
    # ...same code as above to line buffer.seek(0)...
    obj = FileModel()
    obj.file = File(buffer, name='hello.pdf')
    obj.save()
Вернуться на верх