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实现二分查找算法实例
May 26 Python
Django中处理出错页面的方法
Jul 15 Python
Python中return语句用法实例分析
Aug 04 Python
更改Ubuntu默认python版本的两种方法python-> Anaconda
Dec 18 Python
Python 内置函数memoryview(obj)的具体用法
Nov 23 Python
python学生管理系统代码实现
Apr 05 Python
django 删除数据库表后重新同步的方法
May 27 Python
Python闭包函数定义与用法分析
Jul 20 Python
Django中日期处理注意事项与自定义时间格式转换详解
Aug 06 Python
Python基于numpy模块实现回归预测
May 14 Python
基于python+selenium自动健康打卡的实现代码
Jan 13 Python
python 如何在list中找Topk的数值和索引
May 20 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
页面乱码问题的根源及其分析
2013/08/09 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
原生JS进行前后端同构
2018/04/22 Javascript
js实现简单分页导航栏效果
2019/06/28 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
[10:34]DOTA2上海特级锦标赛全纪录
2016/03/25 DOTA
浅谈python的dataframe与series的创建方法
2018/11/12 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
python定时按日期备份MySQL数据并压缩
2019/04/19 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
前端实现打印图像功能
2019/08/27 HTML / CSS
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
信息专业个人的自我评价
2013/12/27 职场文书
美德少年事迹材料
2014/01/23 职场文书
道路交通安全实施方案
2014/03/12 职场文书
授权委托书格式模板
2014/04/03 职场文书
小学英语课后反思
2014/04/26 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
怎样写离婚协议书
2015/01/26 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
Nest.js参数校验和自定义返回数据格式详解
2021/03/29 Javascript
python通配符之glob模块的使用详解
2021/04/24 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS