如何直接将文件写入Django的FileField字段?
在Python/Django中直接写入模型的FileField字段方法
可以直接将内容写入Django模型的FileField字段,但不能直接使用普通open()生成的文件对象操作,需要借助Django提供的ContentFile或File工具类来实现。
方法一:直接生成内容存入(无需本地临时文件)
如果不需要先在本地生成文件,可直接用ContentFile将内容写入字段:
from django.core.files.base import ContentFile from your_app.models import Registry # 创建Registry实例 registry = Registry(name="示例注册表") # 将内容写入form字段,指定存储的文件名 registry.form.save('readme.txt', ContentFile('random text'), save=False) # 最后保存模型 registry.save()
方法二:读取本地已生成的文件存入
如果已经在本地生成了文件,可使用File类读取后赋值:
from django.core.files import File from your_app.models import Registry # 先在本地生成文件 with open('readme.txt', 'w') as f: f.write('random text') # 读取本地文件并写入模型字段 registry = Registry(name="示例注册表") with open('readme.txt', 'rb') as f: registry.form.save('readme.txt', File(f), save=False) registry.save()
关键说明
registry.form.save()方法的第一个参数是文件存储到服务器时的名称,第二个参数是Django的文件内容对象(ContentFile或File)- 设置
save=False是为了避免每次字段保存时都触发模型的save()方法,最后统一保存模型更高效 - 文件会自动存储到模型
FileField的upload_to指定目录下,比如示例中的registryform/readme.txt
内容的提问来源于stack exchange,提问作者Nikko
相关产品推荐
相关产品推荐

