这篇文章将为大家详细讲解有关django中如何实现多文件上传、form提交和多对多外键保存操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
需求:
需要实现一个用户反馈的接口,用户通过接口提交:
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提交和多对多外键保存操作”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。