django多文件上传,form提交,多对多外键保存的实例
2019-08-06 17:18
2251 查看
需求:
需要实现一个用户反馈的接口,用户通过接口提交:
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提交,多对多外键保存的实例就是小编分享给大家的全部内容了,希望能给大家一个参考
您可能感兴趣的文章:
相关文章推荐
- Ajax提交Form表单及文件上传的实例代码
- django(7)modelform操作及验证、ajax操作普通表单数据提交、文件上传、富文本框基本使用
- 利用resteasy框架构建rest webservice----第三波:实现文件上传---非form提交方式(实例、教程)
- 利用resteasy框架构建rest webservice----第三波:实现文件上传---非form提交方式(实例、教程)
- fileupload实例提交form表单上传文件
- 4 django系列之HTML通过form标签来同时提交表单内容与上传文件
- 使用jQuery.form插件实现表单异步提交+上传文件
- 实现向服务器上传图片文件、实现不同方式的form表单提交方式
- Android文件上传可用于Form表单提交方式(适用于所有网络框架)
- 使用ajax提交form表单,包括ajax文件上传
- 【文件上传】使用jquery.form.js来实现表单提交
- java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例
- Springmvc下一次选多个文件上传(一)Form提交
- 使用ajax提交form表单,包括ajax文件上传的两种方式
- js提交form表单 - input file 文件上传控制上传文件的大小和格式
- 使用FormData对包含文件类型的form表单进行异步提交(文件上传)并配置回调
- JQuery ajax提交form表单实现文件上传
- Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form me
- ajax提交普通表单或者文件上传的form 带回调函数
- .Net之使用Jquery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径