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开发vim插件及心得分享
Nov 04 Python
按日期打印Python的Tornado框架中的日志的方法
May 02 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
Python实现的多线程http压力测试代码
Feb 08 Python
1分钟快速生成用于网页内容提取的xslt
Feb 23 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
Python二进制文件读取并转换为浮点数详解
Jun 25 Python
flask应用部署到服务器的方法
Jul 12 Python
python如何统计代码运行的时长
Jul 24 Python
使用python实现回文数的四种方法小结
Nov 24 Python
python实现自动清理文件夹旧文件
May 10 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 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
如何删除多级目录
2006/10/09 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
jquery中获取select选中值的代码
2011/06/27 Javascript
屏蔽script注入小例子
2013/11/12 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
linux 下实现python多版本安装实践
2014/11/18 Python
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
Python实现的网页截图功能【PyQt4与selenium组件】
2018/07/12 Python
python实战教程之自动扫雷
2018/07/13 Python
python安装virtualenv虚拟环境步骤图文详解
2019/09/18 Python
200行python代码实现贪吃蛇游戏
2020/04/24 Python
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
医学检验专业个人求职信范文
2013/12/04 职场文书
评析教师个人的自我评价
2014/02/19 职场文书
环保倡议书100字
2014/05/15 职场文书
团队激励口号
2014/06/06 职场文书
求职自我评价怎么写
2015/03/09 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
财务统计员岗位职责
2015/04/14 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers