2010-09-16 59 views
1

我試圖在前端模仿Photologue應用程序的管理界面。爲了實現這一點,我迄今創建視圖中的比特的代碼:從文件上傳模型中的表格

def galleryuploader(request): 
    GalleryFormSet = modelformset_factory(GalleryUpload)  
    if request.method == 'POST': 
     formset = GalleryFormSet(request.POST, request.FILES) 
     if formset.is_valid(): 
      formset.save() 
      # do something. ... do what? 
    else: 
     formset = GalleryFormSet() 
    return render_to_response("cms_helper/gallery_upload.html", { 
     "formset": formset, 
    }) 

和模板:

<form method="post" action=""> 
    {{ formset }} 
    <input type="submit" /> 
</form> 

我使用Django的「form from models」的方法,用於產生此前端形成。

問題:當我嘗試上傳文件(因爲我正在上傳照片到照片庫),並點擊提交時,它返回一個表單錯誤,告訴我缺少一個必填字段(文件)。

我想我沒有檢查任何文件的請求,但即使我是,我也不太確定如何。這裏有一些關於file uploads的文檔,但是我還沒有破譯它。

如果您對如何使此上傳表單有任何建議,我會非常樂意聽到他們的聲音。提前致謝!

回答

3

enctype="multipart/form-data"屬性添加到您的表單標記。你也需要真正對上傳的文件做些什麼。下面是來自django docs的例子:

from django.http import HttpResponseRedirect 
from django.shortcuts import render_to_response 

# Imaginary function to handle an uploaded file. 
from somewhere import handle_uploaded_file 

def upload_file(request): 
    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES) 
     if form.is_valid(): 
      # you'll need to loop through the uploaded files here. 
      handle_uploaded_file(request.FILES['file']) 
      return HttpResponseRedirect('/success/url/') 
    else: 
     form = UploadFileForm() 
    return render_to_response('upload.html', {'form': form}) 

def handle_uploaded_file(f): 
    destination = open('some/file/name.txt', 'wb+') 
    for chunk in f.chunks(): 
     destination.write(chunk) 
    destination.close() 

(有關中途評論)

+0

望着Photologue模式,我看到「GalleryUpload」類中的功能被稱爲「process_zipfile」以及「拯救」 。我會猜測並且說我應該從我的視角中調用這些內容(如示例代碼所示)? – 2010-09-16 02:56:28

+0

布埃諾。感謝您的幫助..我可以自己閱讀,但總是有助於突出顯示:P – 2010-09-17 18:32:50

+0

@Brian D:對不起,我沒有看到您先前的評論。第二雙眼睛總是有幫助:)很高興你明白了。 – sdolan 2010-09-17 18:42:49