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基础教程之面向对象的一些概念
Aug 29 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
Python中循环后使用list.append()数据被覆盖问题的解决
Jul 01 Python
django使用LDAP验证的方法示例
Dec 10 Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 Python
解决django后台管理界面添加中文内容乱码问题
Nov 15 Python
Python 从attribute到property详解
Mar 05 Python
selenium判断元素是否存在的两种方法小结
Dec 07 Python
Python自动化工具之实现Excel转Markdown表格
Apr 08 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
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
2014/08/19 PHP
php连接mysql数据库
2017/03/21 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
javascript一点特殊用法
2008/05/28 Javascript
WordPress JQuery处理沙发头像
2009/06/22 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
详解微信UnionID作用
2019/05/15 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
vue项目使用$router.go(-1)返回时刷新原来的界面操作
2020/07/26 Javascript
openlayers4实现点动态扩散
2020/08/17 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
python微信跳一跳系列之色块轮廓定位棋盘
2018/02/26 Python
详解如何减少python内存的消耗
2019/08/09 Python
Python如何将函数值赋给变量
2020/04/28 Python
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
教师自我评价范文
2013/12/16 职场文书
九年级科学教学反思
2014/01/29 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
优秀团支部申报材料
2014/12/26 职场文书
环卫处个人工作总结
2015/03/04 职场文书
党委工作总结2015
2015/04/27 职场文书
Python绘制分类图的方法
2021/04/20 Python
Go语言基础函数基本用法及示例详解
2021/11/17 Golang
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript