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


猜你喜欢
- Python多线程与多进程中join()方法的效果是相同的。下面仅以多线程为例:首先需要明确几个概念:知识点一:当一个进程启动之后,会默认产
- 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 
- 一、简介Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且还表现在其良好的可扩展性上,正因如此,Python已
- #当前文件的路径pwd = os.getcwd()#当前文件的父路径father_path=os.path.abspath(os.path.
- 上次成功升级了最土商业版,接下来就是整合公司的社区网站,先说明一下我现在工作的地方是个地方社区网站,用的基础程序是PHPWind,我的任务就
- 服务:# chkconfig --list 列出所有系统
- 这篇博客讲的是SQL server的分页方法,用的SQL server 2012版本。下面都用pageIndex表示页数,pageSize表
- 这是一道常见的面试题,在实际项目中经常会用到。需求:求出以产品类别为分组,各个分组里价格最高的产品信息。实现过程如下:declare @t
- 前言说起这个事情吧也相对来说比较尴尬,对于一个技术来说忘记密码然后找回密码都是相当简单的一个事情,但是在生产环境中没有保存记录只能是自己的失
- 引用是指保存的值为对象的地址。在 Python 语言中,一个变量保存的值除了基本类型保存的是值外,其它都是引用,因此对于它们的使用就需要小心
- 概述在 TypeScript 中我们会使用泛型来对函数的相关类型进行约束。这里的函数,同时包含 class 的构造函数,因此,一个类的声明部
- 一、多项式拟合多项式拟合的话,用的的是numpy这个库的polyfit这个函数。那么多项式拟合,最简单的当然是,一次多项式拟合了,就是线性回
- 这两天在做小程序调取地图的时候遇到一个问题,如果用户第一次拒绝了位置权限请求。那么就不会再次唤起授权弹出。需要我们引导用户去开启。具体做法如
- Tensorflow可以使用训练好的模型对新的数据进行测试,有两种方法:第一种方法是调用模型和训练在同一个py文件中,中情况比较简单;第二种
- MAC下MYSQL5.7.17无法连接的问题,下载安装完SQLBench_community 6.3.9后新建MYSQL CONNECTIO
- 介绍matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方
- fileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的input()函数有点类似文件readlines()方法,区
- 在Python中有时会碰到需要一个一维列向量(n*1)与另一个一维列向量(n*1)的转置(1*n)相乘,得到一个n*n的矩阵的情况。但是在p
- 简单的解析例子:首先还是从官方文档中的例子:package mainimport (?? ?"fmt"?? ?"
- 一、seaborn概述Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用sea