django多文件上传,form提交,多对多外键保存的实例
框架(架构)  /  管理员 发布于 6年前   139
需求:
需要实现一个用户反馈的接口,用户通过接口提交:
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提交,多对多外键保存的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号