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 Web框架Flask中使用七牛云存储实例
Feb 08 Python
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python标准库inspect的具体使用方法
Dec 06 Python
python决策树之CART分类回归树详解
Dec 20 Python
Python实现合并两个列表的方法分析
May 28 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
Python线程之定位与销毁的实现
Feb 17 Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
numpy.linalg.eig() 计算矩阵特征向量方式
Nov 29 Python
flask框架自定义url转换器操作详解
Jan 25 Python
python编写俄罗斯方块
Mar 13 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
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
javascript 全角转换实现代码
2009/07/17 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
JS画线(实例代码)
2013/11/20 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
jQuery 选择器详解
2015/01/19 Javascript
jquery UI Datepicker时间控件的使用方法(终结版)
2015/11/07 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
AngularJS实现按钮提示与点击变色效果
2016/09/07 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
Nodejs使用Mongodb存储与提供后端CRD服务详解
2018/09/04 NodeJs
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
vue实现顶部菜单栏
2020/11/08 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
Vue页面渲染中key的应用实例教程
2021/01/12 Vue.js
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
Python入门篇之条件、循环
2014/10/17 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
2016/07/04 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
python绘制多个曲线的折线图
2020/03/23 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
广告设计专业自荐信范文
2013/11/14 职场文书
市场开发计划书
2014/05/07 职场文书
团拜会策划方案
2014/06/07 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
师德师风培训感言
2015/08/03 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书
经典格言警句:没有热忱,世间便无进步
2019/11/13 职场文书