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实现带错误处理功能的远程文件读取方法
Apr 29 Python
使用Nginx+uWsgi实现Python的Django框架站点动静分离
Mar 21 Python
python数据结构之链表的实例讲解
Jul 25 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
Jun 27 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
Python内置数据类型list各方法的性能测试过程解析
Jan 07 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
Python opencv相机标定实现原理及步骤详解
Apr 09 Python
简单了解python shutil模块原理及使用方法
Apr 28 Python
Python加载数据的5种不同方式(收藏)
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操作数组的一些函数整理介绍
2011/07/17 PHP
php获取今日开始时间和结束时间的方法
2017/02/27 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
php-msf源码详解
2017/12/25 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
vue-router实现webApp切换页面动画效果代码
2017/05/25 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
jQuery动态移除与增加onclick属性的方法详解
2018/06/07 jQuery
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
如何在JavaScript中正确处理变量
2020/12/25 Javascript
python生成ppt的方法
2018/06/07 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
Python3.8中使用f-strings调试
2019/05/22 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
后进生转化工作制度
2014/01/17 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
电子工程求职信
2014/07/17 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
网聊搭讪开场白
2015/05/28 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
如何利用python实现Simhash算法
2022/06/28 Python