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 set集合类型操作总结
Nov 07 Python
Python3搜索及替换文件中文本的方法
May 22 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
解析Python编程中的包结构
Oct 25 Python
Python实现将不规范的英文名字首字母大写
Nov 15 Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
python修改list中所有元素类型的三种方法
Apr 09 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
python3爬取数据至mysql的方法
Jun 26 Python
Python使用pandas对数据进行差分运算的方法
Dec 22 Python
Python3.8中使用f-strings调试
May 22 Python
python tqdm实现进度条的示例代码
Nov 10 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
mysq GBKl乱码
2006/11/28 PHP
PHP魔术方法的使用示例
2015/06/23 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
php工具型代码之印章抠图
2018/07/18 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
jQuery、layer实现弹出层的打开、关闭功能
2017/06/28 jQuery
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
JavaScript实现的弹出遮罩层特效经典示例【基于jQuery】
2019/07/10 jQuery
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
Python中使用asyncio 封装文件读写
2016/09/11 Python
PyQt5每天必学之进度条效果
2018/04/19 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
keras输出预测值和真实值方式
2020/06/27 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
html5唤醒APP小记
2019/03/27 HTML / CSS
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
书法培训心得体会
2014/01/05 职场文书
初一生物教学反思
2014/01/18 职场文书
2015年企业新年寄语
2014/12/08 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
会计稽核岗位职责
2015/04/13 职场文书
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript