网络编程
位置:首页>> 网络编程>> Python编程>> django多文件上传,form提交,多对多外键保存的实例

django多文件上传,form提交,多对多外键保存的实例

作者:一只小coder  发布时间:2023-04-13 04:24:12 

标签: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))

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

来源:https://blog.csdn.net/u014633966/article/details/83272334

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com