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入门篇之正则表达式
Oct 20 Python
python实现定时播放mp3
Mar 29 Python
Python内建函数之raw_input()与input()代码解析
Oct 26 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
Python内置函数——__import__ 的使用方法
Nov 24 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
详解python中init方法和随机数方法
Mar 13 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
Python类反射机制使用实例解析
Dec 30 Python
python右对齐的实例方法
Jul 05 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
OpenCV-Python使用cv2实现傅里叶变换
Jun 09 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/03/11 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
php session的应用详细介绍
2017/03/22 PHP
css3实现背景模糊的三种方式
2021/03/09 HTML / CSS
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
jquery操作select大全
2014/04/25 Javascript
使用forever管理nodejs应用教程
2014/06/03 NodeJs
jQuery实现响应浏览器缩放大小并改变背景颜色
2014/10/31 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
AngularJS基于ui-route实现深层路由的方法【路由嵌套】
2016/12/14 Javascript
js数组去重的hash方法
2016/12/22 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
VUE 实现element upload上传图片到阿里云
2020/08/12 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
Python正则表达式指南 推荐
2018/10/09 Python
Python读取JSON数据操作实例解析
2020/05/18 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
德国网上超市:myTime.de
2019/08/26 全球购物
中专生自荐信
2013/10/12 职场文书
银行求职推荐信范文
2013/11/30 职场文书
网络专业学生个人的自我评价
2013/12/16 职场文书
大学生求职信范文应怎么写
2014/01/01 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
采购部部长岗位职责
2014/02/06 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
2014年卫生工作总结
2014/11/27 职场文书
研究生导师推荐信
2015/03/25 职场文书
运动会宣传稿50字
2015/07/23 职场文书
MySQL系列之四 SQL语法
2021/07/02 MySQL