web-dev-qa-db-ja.com

DjangoのFileFieldにローカルファイルを割り当てる方法は?

ディスクから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

よろしくお願いします

32
Leodom

Djangoは独自の ファイルタイプ を使用します(機能が少し強化されています)。とにかく、Djangoのファイルタイプは デコレータ のように機能するので、Django APIのニーズを満たすために、既存のファイルオブジェクトにラップするだけです。

from Django.core.files import File

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

もちろん、次のように書くことで、その場でファイルを装飾することができます(1行少ない):

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