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设计模式编程中的访问者与观察者模式
Jan 26 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
python抓取京东小米8手机配置信息
Nov 13 Python
pymongo中group by的操作方法教程
Mar 22 Python
Python实现某论坛自动签到功能
Aug 20 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
详解基于python的全局与局部序列比对的实现(DNA)
Oct 07 Python
python 详解turtle画爱心代码
Feb 15 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+mysql保存和输出文件
2006/10/09 PHP
php字符串过滤与替换小结
2015/01/26 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
Moment.js 不容错过的超棒Javascript日期处理类库
2012/04/15 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
2016/08/31 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
微信小程序 上传头像的实例详解
2017/10/27 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
python实现文件名批量替换和内容替换
2014/03/20 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
Python利用itchat库向好友或者公众号发消息的实例
2019/02/21 Python
python3+opencv生成不规则黑白mask实例
2020/02/19 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
香港个人化生活购物网站:Ballyhoo Limited
2016/09/10 全球购物
Chain Reaction Cycles芬兰:世界上最大的在线自行车商店
2017/12/06 全球购物
华为的Java面试题
2014/03/07 面试题
创业计划书撰写原则
2014/01/25 职场文书
合作意向书模板
2014/03/31 职场文书
服务标语大全
2014/06/18 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
学习三严三实心得体会
2014/10/13 职场文书
忠诚与背叛观后感
2015/06/04 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技