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发送email的3种方法
Apr 28 Python
python实现的简单抽奖系统实例
May 22 Python
Python处理中文标点符号大集合
May 14 Python
python中从str中提取元素到list以及将list转换为str的方法
Jun 26 Python
python中join()方法介绍
Oct 11 Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
Python对接支付宝支付自实现功能
Oct 10 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
Python figure参数及subplot子图绘制代码
Apr 18 Python
Python 字典一个键对应多个值的方法
Sep 29 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+MSSQL分页的例子
2006/10/09 PHP
PHP-MySQL教程归纳总结
2008/06/07 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
JavaScript的单例模式 (singleton in Javascript)
2010/06/11 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
js 文本滚动效果的实例代码
2013/08/17 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
WEB前端设计师常用工具集锦
2014/12/09 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
python 编码规范整理
2018/05/05 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
计算机专业自我鉴定
2013/10/15 职场文书
国窖1573广告词
2014/03/21 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
学校标语大全
2014/06/19 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
教师党员整改措施
2014/10/24 职场文书
放假通知
2015/04/14 职场文书
病房管理制度范本
2015/08/06 职场文书
关于五一放假的通知
2015/08/18 职场文书
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers