django多文件上傳,form提交,多對(duì)多外鍵保存的實(shí)例
需求:
需要實(shí)現(xiàn)一個(gè)用戶反饋的接口,用戶通過(guò)接口提交:
1.一段文字
2. 一個(gè)log文件
3. 多個(gè)圖片
找了很多ModelForm,DRF-Serializer的資料,都沒(méi)找到簡(jiǎn)單好用的,干脆就直接寫(xiě),啥也不用。
Model.py
class UserFeedback(models.Model):
user = models.ForeignKey(User, verbose_name="用戶")
desc = models.TextField(default="", verbose_name=u'問(wèn)題描述')
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="提交時(shí)間")
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)
由于一個(gè)反饋,可以保護(hù)多個(gè)圖片,所以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中,先把所有的圖片保存下來(lái),然后在創(chuàng)建反饋后,添加圖片關(guān)聯(lián)。
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))
這樣簡(jiǎn)單粗暴,也容易理解。這里記錄下。
以上這篇django多文件上傳,form提交,多對(duì)多外鍵保存的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)自動(dòng)登錄后臺(tái)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)自動(dòng)登錄后臺(tái)管理系統(tǒng),并進(jìn)行后續(xù)操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
Python 字典與字符串的互轉(zhuǎn)實(shí)例
下面小編就為大家?guī)?lái)一篇Python 字典與字符串的互轉(zhuǎn)實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
Python實(shí)現(xiàn)打磚塊小游戲代碼實(shí)例
這篇文章主要介紹了Python打磚塊小游戲,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
PyQt5實(shí)現(xiàn)用戶登錄GUI界面及登錄后跳轉(zhuǎn)
PyQt5是強(qiáng)大的GUI工具之一,通過(guò)其可以實(shí)現(xiàn)優(yōu)秀的桌面應(yīng)用程序。本文主要介紹了PyQt5實(shí)現(xiàn)用戶登錄GUI界面及登錄后跳轉(zhuǎn),具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11
Flask的圖形化管理界面搭建框架Flask-Admin的使用教程
Flask-Admin是一個(gè)為Python的Flask框架服務(wù)的微型框架,可以像Django-Admin那樣為用戶生成Model層面的數(shù)據(jù)管理界面,接下來(lái)就一起來(lái)看一下Flask的圖形化管理界面搭建框架Flask-Admin的使用教程2016-06-06
Python簡(jiǎn)單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽(tīng)功能示例
這篇文章主要介紹了Python簡(jiǎn)單實(shí)現(xiàn)socket信息發(fā)送與監(jiān)聽(tīng)功能,結(jié)合實(shí)例形式分析了Python基于socket構(gòu)建客戶端與服務(wù)器端通信相關(guān)操作技巧,需要的朋友可以參考下2018-01-01

