django 实现手动存储文件到model的FileField


Posted in Python onMarch 30, 2020

通过POST请求,上传了文件,想要将文件存储在模型的FileField中

request.FILES中的值均为UploadedFile类文件对象

表单上传的文件对象存储在类字典对象request.FILES中,表单格式需为multipart/form-data

FieldFile.save(name, content, save=True)

name:命名文件名

content:必须是django.core.files.File或django.core.files.base.ContentFile二者之一的一个实例

from django.core.files.base import ContentFile
#from django.core.files import File


photo=request.FILES.get('file','')
user=UserProfile.objects.get(id=uid)
if photo: 
 file_content = ContentFile(photo.read()) #创建ContentFile对象
 #file_content = File(photo.read()) #创建File对象
 user.photo.save(photo.name, file_content) #保存文件到user的photo域
 user.save()

补充知识:python-ContentFile未保存在Django模型FileField中

在我的Django模型中将字符串另存为文件时,我遇到了问题,因为每当我尝试取回数据时,都会给我一个ValueError(“属性没有关联的文件”).

详细信息如下:

模型:

class GeojsonData(models.Model):
dname = models.CharField(max_length=200, unique=True)
gdata = models.FileField(upload_to='data')
def __str__(self):
 return self.dname

保存数据的代码:

cf = ContentFile(stringToBeSaved)
gj = GeojsonDatua(dname = namevar, gdata = cf)
gj.save()

尝试读取数据的代码:

def readGeo(data):
 f = GeojsonData.objects.all().get(id=data.id).gdata
 f.open(mode ='rb')
 geo = f.read()
 return geo

追溯:

File "C:\Python\Python36-32\lib\site-packages\django\core\handlers\exception.py" in inner
41. response = get_response(request)

File "C:\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)

File "C:\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Python\Python36-32\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)

File "C:\app\views.py" in mapa
80. geostr = app.readGeo.readGeo(d)

File "C:\app\readGeo.py" in readGeo
6. f.open(mode ='rb')

File "C:\Python\Python36-32\lib\site-packages\django\db\models\fields\files.py" in open
80. self._require_file()

File "C:Python\Python36-32\lib\site-packages\django\db\models\fields\files.py" in _require_file
46. raise ValueError("The '%s' attribute has no file associated with it." % self.field.name)

Exception Type: ValueError at /app/map/1
Exception Value: The 'gdata' attribute has no file associated with it.

解决方法:

您需要将ContentFile另存为实际文件.而不是直接将其分配给该字段,您应该调用该字段的save方法并将其传递给:

gj = GeojsonDatua(dname = namevar)
gj.gdata.save('myfilename', cf)

参见the docs.

另请注意,如果您始终像这样创建gdata字段,则可能根本就不需要FileField.也许改用TextField.

以上这篇django 实现手动存储文件到model的FileField就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
python中私有函数调用方法解密
Apr 29 Python
Python实现约瑟夫环问题的方法
May 03 Python
Python 40行代码实现人脸识别功能
Apr 02 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
python批量修改文件编码格式的方法
May 31 Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 Python
在Python中append以及extend返回None的例子
Jul 20 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
修改 CentOS 6.x 上默认Python的方法
Sep 06 Python
OpenCV python sklearn随机超参数搜索的实现
Jan 17 Python
基于PyQT实现区分左键双击和单击
May 19 Python
解决django FileFIELD的编码问题
Mar 30 #Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
Mar 30 #Python
Django 删除upload_to文件的步骤
Mar 30 #Python
python with语句的原理与用法详解
Mar 30 #Python
对django 2.x版本中models.ForeignKey()外键说明介绍
Mar 30 #Python
Python进程的通信Queue、Pipe实例分析
Mar 30 #Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 #Python
You might like
php中的时间显示
2007/01/18 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
Javascript实例教程(19) 使用HoTMetal(4)
2006/12/23 Javascript
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
jQuery中slice()方法用法实例
2015/01/07 Javascript
Bootstrap3学习笔记(三)之表格
2016/05/20 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
初学python数组的处理代码
2011/01/04 Python
python插入数据到列表的方法
2015/04/30 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
python创建文本文件的简单方法
2020/08/30 Python
Django nginx配置实现过程详解
2020/09/10 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
车辆维修工自我评价怎么写
2013/09/20 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
前台文员职责范本
2014/03/07 职场文书
初中班主任评语
2014/04/24 职场文书
个人欠款担保书
2014/05/20 职场文书
银行中层干部培训心得体会
2016/01/11 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书