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最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
springboot配置文件抽离 git管理统 配置中心详解
Sep 02 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
Python 如何实现访问者模式
Jul 28 Python
使用Python画了一棵圣诞树的实例代码
Nov 27 Python
Pandas数据分析的一些常用小技巧
Feb 07 Python
用Python创建简易网站图文教程
Jun 11 Python
Python中异常处理用法
Nov 27 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
第七节--类的静态成员
2006/11/16 PHP
PHP之短标签开启设置
2013/06/17 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
arguments对象
2006/11/20 Javascript
javascript之ESC(第二类混淆)
2007/05/06 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
JS实现滑动菜单效果代码(包括Tab,选项卡,横向等效果)
2015/09/24 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
vue中的v-model原理,与组件自定义v-model详解
2020/08/04 Javascript
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
文员个人求职自荐信
2013/09/21 职场文书
一名女生的自荐信
2013/12/08 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
统计岗位职责
2014/02/21 职场文书
争先创优公开承诺书
2014/08/30 职场文书
市场总监岗位职责
2015/02/11 职场文书
开业典礼致辞
2015/07/29 职场文书
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技