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程序语言快速上手教程
Jul 18 Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 Python
Django学习教程之静态文件的调用详解
May 08 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
Django中使用第三方登录的示例代码
Aug 20 Python
Django中使用Celery的教程详解
Aug 24 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
Sep 15 Python
使用Python爬取弹出窗口信息的实例
Mar 14 Python
用python对excel进行操作(读,写,修改)
Dec 25 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
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
台湾中原大学php教程孙仲岳主讲
2008/01/07 PHP
来自phpguru得Php Cache类源码
2010/04/15 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
2015/05/11 PHP
PHP实现添加购物车功能
2017/03/06 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
PHP高并发和大流量解决方案整理
2021/03/09 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
微信小程序 扎金花简单实例
2017/02/21 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
JS中去掉array中重复元素的方法
2017/05/26 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
vue 在服务器端直接修改请求的接口地址
2020/12/19 Vue.js
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
Python HTMLTestRunner如何下载生成报告
2020/09/04 Python
英国护肤品购物网站:Beauty Expert
2016/08/19 全球购物
法国体育用品商店:GO Sport
2019/10/23 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
服务行业个人求职的自我评价
2013/12/12 职场文书
软件售后服务方案
2014/05/29 职场文书
经济信息系毕业生自荐信
2014/06/02 职场文书
Python预测分词的实现
2021/06/18 Python
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python
Python字符串格式化方式
2022/04/07 Python