django多文件上传,form提交,多对多外键保存的实例


Posted in Python onAugust 06, 2019

需求:

需要实现一个用户反馈的接口,用户通过接口提交:

1.一段文字

2. 一个log文件

3. 多个图片

找了很多ModelForm,DRF-Serializer的资料,都没找到简单好用的,干脆就直接写,啥也不用。

Model.py

class UserFeedback(models.Model):
 user = models.ForeignKey(User, verbose_name="用户")
 desc = models.TextField(default="", verbose_name=u'问题描述')
 logfile = models.FileField(upload_to='UserFeedback/%Y/%m/', 
 verbose_name=u'log文件',null=True, blank=True)
 submit_time = models.DateTimeField(default=datetime.now, verbose_name="提交时间")
 images=models.ManyToManyField("UserFeedbackImages",verbose_name=u'图片')
 
class UserFeedbackImages(models.Model):
 image = models.ImageField(upload_to='UserFeedbackImages/%Y/%m/',
  verbose_name=u'反馈图片', null=True, blank=True)

由于一个反馈,可以保护多个图片,所以images字段是ManyToMany

html:

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>用户反馈</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
 <textarea name="desc"></textarea>
 <input type="file" name="logfile">
 <input type="file" name="images" multiple>
 <button type="submit">提交</button>
</form>
</body>
</html>

<form>中必须要加上:

enctype="multipart/form-data"

和input中定义:

multiple

View.py中,先把所有的图片保存下来,然后在创建反馈后,添加图片关联。

class feedback(LoginRequiredMixin,APIView):
 def post(self, request):
  #save all images
  ret={}
  try:
   imgs=[]
   for payload in request.data.getlist("images"):
    img=UserFeedbackImages.objects.create(image=payload)
    imgs.append(img)  
   ufb=UserFeedback.objects.create(user=request.user,
   desc=request.POST.get("desc"),
   logfile=request.data.get("logfile"))
   for img in imgs:
    ufb.images.add(img)
   ufb.save()
   ret["status"]="success"
  except Exception as e:
   ret["status"]="fail"
   ret["msg"]=str(e)
  return Response(json.dumps(ret))

这样简单粗暴,也容易理解。这里记录下。

以上这篇django多文件上传,form提交,多对多外键保存的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的__slots__使用示例
Feb 26 Python
python字典get()方法用法分析
Apr 17 Python
Python中字典(dict)合并的四种方法总结
Aug 10 Python
python使用rpc框架gRPC的方法
Aug 24 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
详解python中的index函数用法
Aug 06 #Python
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
Aug 06 #Python
对Django url的几种使用方式详解
Aug 06 #Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 #Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
Aug 06 #Python
django基于存储在前端的token用户认证解析
Aug 06 #Python
django基于cors解决跨域请求问题详解
Aug 06 #Python
You might like
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
Laravel 创建可以传递参数 Console服务的例子
2019/10/14 PHP
用javascript实现计算两个日期的间隔天数
2007/08/14 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
javascript管中窥豹 形参与实参浅析
2011/12/17 Javascript
javascript实现yield的方法
2013/11/06 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
nodejs中各种加密算法的实现详解
2019/07/11 NodeJs
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
python类型强制转换long to int的代码
2013/02/10 Python
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
Python 分发包中添加额外文件的方法
2019/08/16 Python
用 Python 制作地球仪的方法
2020/04/24 Python
Python爬取阿拉丁统计信息过程图解
2020/05/12 Python
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
党校培训思想汇报
2014/01/03 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
企业办公室主任岗位职责
2014/02/19 职场文书
餐饮总经理岗位职责
2014/03/07 职场文书
公司年夜饭通知
2015/04/25 职场文书
2015年环境整治工作总结
2015/05/22 职场文书