经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
django多文件上传,form提交,多对多外键保存的实例
来源:jb51  时间:2019/8/7 8:30:53  对本文有异议

需求:

需要实现一个用户反馈的接口,用户通过接口提交:

1.一段文字

2. 一个log文件

3. 多个图片

找了很多ModelForm,DRF-Serializer的资料,都没找到简单好用的,干脆就直接写,啥也不用。

Model.py

  1. class UserFeedback(models.Model):
  2. user = models.ForeignKey(User, verbose_name="用户")
  3. desc = models.TextField(default="", verbose_name=u'问题描述')
  4. logfile = models.FileField(upload_to='UserFeedback/%Y/%m/',
  5. verbose_name=u'log文件',null=True, blank=True)
  6. submit_time = models.DateTimeField(default=datetime.now, verbose_name="提交时间")
  7. images=models.ManyToManyField("UserFeedbackImages",verbose_name=u'图片')
  8. class UserFeedbackImages(models.Model):
  9. image = models.ImageField(upload_to='UserFeedbackImages/%Y/%m/',
  10. verbose_name=u'反馈图片', null=True, blank=True)

由于一个反馈,可以保护多个图片,所以images字段是ManyToMany

html:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>用户反馈</title>
  6. </head>
  7. <body>
  8. <form action="" method="post" enctype="multipart/form-data">
  9. <textarea name="desc"></textarea>
  10. <input type="file" name="logfile">
  11. <input type="file" name="images" multiple>
  12. <button type="submit">提交</button>
  13. </form>
  14. </body>
  15. </html>

<form>中必须要加上:

enctype="multipart/form-data"

和input中定义:

multiple

View.py中,先把所有的图片保存下来,然后在创建反馈后,添加图片关联。

  1. class feedback(LoginRequiredMixin,APIView):
  2. def post(self, request):
  3. #save all images
  4. ret={}
  5. try:
  6. imgs=[]
  7. for payload in request.data.getlist("images"):
  8. img=UserFeedbackImages.objects.create(image=payload)
  9. imgs.append(img)
  10. ufb=UserFeedback.objects.create(user=request.user,
  11. desc=request.POST.get("desc"),
  12. logfile=request.data.get("logfile"))
  13. for img in imgs:
  14. ufb.images.add(img)
  15. ufb.save()
  16. ret["status"]="success"
  17. except Exception as e:
  18. ret["status"]="fail"
  19. ret["msg"]=str(e)
  20. return Response(json.dumps(ret))

这样简单粗暴,也容易理解。这里记录下。

以上这篇django多文件上传,form提交,多对多外键保存的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号