django多文件上傳,form提交,多對多外鍵保存的實(shí)例
需求:
需要實(shí)現(xiàn)一個(gè)用戶反饋的接口,用戶通過接口提交:
1.一段文字
2. 一個(gè)log文件
3. 多個(gè)圖片
找了很多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="提交時(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中,先把所有的圖片保存下來,然后在創(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))
這樣簡單粗暴,也容易理解。這里記錄下。
以上這篇django多文件上傳,form提交,多對多外鍵保存的實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django 使用easy_thumbnails壓縮上傳的圖片方法
今天小編就為大家分享一篇Django 使用easy_thumbnails壓縮上傳的圖片方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07python向json中追加數(shù)據(jù)的兩種方法總結(jié)
JSON用來存儲和交換文本信息,比xml更小/更快/更易解析,下面這篇文章主要給大家介紹了關(guān)于python向json中追加數(shù)據(jù)的兩種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05詳解Python并發(fā)編程之從性能角度來初探并發(fā)編程
這篇文章主要介紹了詳解Python并發(fā)編程之從性能角度來初探并發(fā)編程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08python項(xiàng)目運(yùn)行導(dǎo)致內(nèi)存越來越大的原因詳析
最近在跑python程序時(shí),出現(xiàn)占用的內(nèi)存不斷增加的情況,下面這篇文章主要給大家介紹了關(guān)于python項(xiàng)目運(yùn)行導(dǎo)致內(nèi)存越來越大的原因詳析,本文通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11django 實(shí)現(xiàn)編寫控制登錄和訪問權(quán)限控制的中間件方法
今天小編就為大家分享一篇django 實(shí)現(xiàn)編寫控制登錄和訪問權(quán)限控制的中間件方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01