Подтвердить что ты не робот

Как назначить локальный файл для FileField в Django?

Я пытался назначить файл с моего диска на FileField, но у меня есть эта ошибка:

AttributeError: объект 'str' не имеет атрибута 'open'

Мой код python:

pdfImage = FileSaver()
pdfImage.myfile.save('new', open('mytest.pdf').read())

и мои models.py

class FileSaver(models.Model):

    myfile = models.FileField(upload_to="files/")

    class Meta:
        managed=False

Заранее благодарим вас за помощь

4b9b3361

Ответ 1

Django использует свой собственный тип файла (со значительно расширенной функциональностью). В любом случае тип файла Django работает как декоратор, так что вы можете просто обернуть его вокруг существующих файловых объектов для удовлетворения потребностей API Django.

from django.core.files import File

local_file = open('mytest.pdf')
djangofile = File(local_file)
pdfImage.myfile.save('new', djangofile)
local_file.close()

Конечно, вы можете украсить файл на лету, написав следующее (на одну строку меньше):

pdfImage.myfile.save('new', File(local_file))