這篇文章將為大家詳細講解有關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中,先把所有的圖片保存下來,然后在創(chuàng)建反饋后,添加圖片關聯(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))
關于“django中如何實現多文件上傳、form提交和多對多外鍵保存操作”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
標題名稱:django中如何實現多文件上傳、form提交和多對多外鍵保存操作-創(chuàng)新互聯(lián)
文章轉載:http://www.rwnh.cn/article28/csjijp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供外貿網站建設、商城網站、品牌網站制作、網站內鏈、域名注冊、網站設計
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)