2010-08-17 31 views
21

我试图分配从我的磁盘FileField或文件,但我有此错误:如何将本地文件分配给Django中的FileField?

AttributeError的:“海峡”对象有没有属性“打开”

我的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

Django使用它自己的file type(具有增强的功能)。无论如何,Django的文件类型与decorator类似,因此您可以简单地将其包装在现有的文件对象中以满足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() 

你当然也可以通过编写以下(一条线以下)装饰上飞文件:

pdfImage.myfile.save('new', File(local_file))`. 
+3

覆盖可能是一个坏主意。更好地使用file_ – 2013-02-22 15:17:58

+7

只是为了解释上面的评论(我有点困惑),Aaron正在谈论符号'file'(即变量的名称),而不是传递参数的类型。 – Joe 2013-09-10 08:36:53

相关问题