如何将本地文件分配给 Django 中的 FileField?

新手上路,请多包涵

我试图将一个文件从我的磁盘分配给 FileField,但出现以下错误:

AttributeError: ‘str’ 对象没有属性 ‘open’

我的蟒蛇代码:

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

和我的模型.py

 class FileSaver(models.Model):

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

    class Meta:
        managed=False

预先感谢您的帮助

原文由 Leodom 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 482
2 个回答

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

您当然可以通过编写以下内容(少一行)来即时装饰文件:

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

原文由 tux21b 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您遇到如下错误:

 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position...

然后你必须以二进制模式打开文件: open("mytest.pdf", "rb")

完整示例:

 from django.core.files import File

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

原文由 suhailvs 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏