Как назначить локальный файл в FileField в Django? - PullRequest
27 голосов
/ 17 августа 2010

Я пытался назначить файл с моего диска в 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

Заранее благодарю за помощь

1 Ответ

37 голосов
/ 17 августа 2010

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))
...