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 25 Python
Python中文分词实现方法(安装pymmseg)
Jun 14 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
Python视频爬虫实现下载头条视频功能示例
May 07 Python
python3 线性回归验证方法
Jul 09 Python
Django框架视图层URL映射与反向解析实例分析
Jul 29 Python
python实现批量修改服务器密码的方法
Aug 13 Python
numpy np.newaxis 的实用分享
Nov 30 Python
python deque模块简单使用代码实例
Mar 12 Python
Python如何使用vars返回对象的属性列表
Oct 17 Python
Python urllib3软件包的使用说明
Nov 18 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 mkdir()定义和用法
2009/01/14 PHP
浅析php变量作用域的一些问题
2013/08/08 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
vue element自定义表单验证请求后端接口验证
2019/12/11 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
python 使用pandas计算累积求和的方法
2019/02/08 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
django orm模块中的 is_delete用法
2020/05/20 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
德国购买健身器材:AsVIVA
2017/08/09 全球购物
介绍一下Mysql的存储引擎
2015/02/12 面试题
学校岗位设置方案
2014/01/16 职场文书
2014年元旦感言
2014/03/06 职场文书
六一节目主持词
2014/04/01 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
捐款感谢信
2015/01/20 职场文书
社区安全温馨提示语
2015/07/14 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
详细了解java监听器和过滤器
2021/07/09 Java/Android
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
css3 文字断裂效果
2022/04/22 HTML / CSS