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中正则表达式的用法实例汇总
Aug 18 Python
给Python初学者的一些编程技巧
Apr 03 Python
Python实现删除文件但保留指定文件
Jun 21 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python numpy.array()生成相同元素数组的示例
Nov 12 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
python3实现elasticsearch批量更新数据
Dec 03 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
Python爬虫之Selenium实现键盘事件
Dec 04 Python
Python图片检索之以图搜图
May 31 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
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
JavaScript删除指定子元素代码实例
2015/01/13 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
Js+php实现异步拖拽上传文件
2015/06/23 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python的re模块正则表达式操作
2016/05/25 Python
python添加菜单图文讲解
2019/06/04 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
高中语文课后反思
2014/04/27 职场文书
科学发展观活动总结
2014/08/28 职场文书
不同意离婚答辩状
2015/05/22 职场文书
毕业典礼致辞
2015/07/29 职场文书
小学思想品德教学反思
2016/02/24 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
多属性、多分类MySQL模式设计
2021/04/05 MySQL
python 如何执行控制台命令与操作剪切板
2021/05/20 Python
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript