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随手笔记第一篇(2)之初识列表和元组
Jan 23 Python
Django接受前端数据的几种方法总结
Nov 04 Python
python日志记录模块实例及改进
Feb 12 Python
用Python将IP地址在整型和字符串之间轻松转换
Mar 22 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
Feb 05 Python
将Dataframe数据转化为ndarry数据的方法
Jun 28 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
Pyqt5实现英文学习词典
Jun 24 Python
python获取当前文件路径以及父文件路径的方法
Jul 10 Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 Python
如何用 Python 处理不平衡数据集
Jan 04 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
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
JS遮罩层效果 兼容ie firefox jQuery遮罩层
2010/07/26 Javascript
JS实现点击下载的小例子
2013/07/10 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
浅析Vue 生命周期
2018/06/21 Javascript
详解vue-cli3开发Chrome插件实践
2019/05/29 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
python使用PIL缩放网络图片并保存的方法
2015/04/24 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
python操作excel的方法
2018/08/16 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
Python 去除字符串中指定字符串
2020/03/05 Python
Python插件机制实现详解
2020/05/04 Python
英国水族馆和池塘用品购物网站:Warehouse Aquatics
2019/08/29 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
英语生日邀请函
2014/01/23 职场文书
超市重阳节活动方案
2014/02/10 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
团日活动总结范文
2014/04/25 职场文书
法制宣传标语
2014/06/23 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
班主任开场白
2015/06/01 职场文书
基于tensorflow权重文件的解读
2021/05/26 Python
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
Python利用机器学习算法实现垃圾邮件的识别
2021/06/28 Python
使用python求解迷宫问题的三种实现方法
2022/03/17 Python