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 optparse模块使用实例
Apr 09 Python
在Python中使用列表生成式的教程
Apr 27 Python
在Python中处理列表之reverse()方法的使用教程
May 21 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
Pytorch实现神经网络的分类方式
Jan 08 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
Django查询优化及ajax编码格式原理解析
Mar 25 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
Python中 range | np.arange | np.linspace三者的区别
Mar 22 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
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
PHP输出日历表代码实例
2015/03/27 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
js经验分享 JavaScript反调试技巧
2018/03/10 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
python中正则表达式的使用详解
2014/10/17 Python
Python3字符串学习教程
2015/08/20 Python
用Python设计一个经典小游戏
2017/05/15 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
售后主管岗位职责
2013/12/08 职场文书
元旦晚会感言
2014/03/12 职场文书
慰问敬老院活动总结
2014/04/26 职场文书
推广活动策划方案
2014/08/23 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
世界环境日活动总结
2015/02/11 职场文书
Python实现视频自动打码的示例代码
2022/04/08 Python