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工程师面试题 与Python基础语法相关
Jan 14 Python
Python类属性的延迟计算
Oct 22 Python
Python学习教程之常用的内置函数大全
Jul 14 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
Feb 24 Python
对python的unittest架构公共参数token提取方法详解
Dec 17 Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
详解python with 上下文管理器
Sep 02 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 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中基本HTTP认证技巧分析
2015/03/16 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
Jquery插件仿百度搜索关键字自动匹配功能
2016/05/11 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
python实现获取序列中最小的几个元素
2014/09/25 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Pytorch之parameters的使用
2019/12/31 Python
Python中如何添加自定义模块
2020/06/09 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
中文系学生自荐信范文
2013/11/13 职场文书
会计专业自荐信
2013/12/02 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
公司市场专员岗位职责
2014/06/29 职场文书
安全目标管理责任书
2014/07/25 职场文书
讲座通知范文
2015/04/23 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
MySQL三种方式实现递归查询
2022/04/18 MySQL
vue router 动态路由清除方式
2022/05/25 Vue.js