2017-10-04 60 views
-2

暈,我試圖用filefield上傳文件。但我總是失敗。當執行語句form.errors.as_data()時,瀏覽器返回'tempfile'。我已經試圖從django文檔和一些django參考找到解決方案。但是,仍然無法解決它。 (難以上傳文件到FileField,表格無效

這裏是我的view.py

def dataprocessing(request): 
if request.method == 'POST': 
    form = DocumentForm(request.POST, request.FILES) 

    if form.is_valid(): 
     import pdb; pdb.set_trace() 
     newdoc = Document(docfile=request.FILES['myfile']) 
     newdoc.save() 

     #Redirect to the dataprocessing after POST 
     #return render(request, 'dataprocessing.html') 
     return HttpResponse("success") 
    else: 
     return HttpResponse(form.errors.as_data()) 

else: 
    import pdb; pdb.set_trace() 
    form = DocumentForm() #A empty, unbound form 

return render(request, 'dataprocessing.html', {'form': form}) 

models.py

class Document(models.Model): 
docfile = models.FileField(upload_to='documents/%Y/%m/%d') 

forms.py

class DocumentForm(forms.Form): 
tempfile = forms.FileField() 

而且dataprocessing.html

<form method="post" enctype="multipart/form-data" action="{% url "dataprocessing" %}"> 

        <div class="form-group"> 
         <label for="up">Input Data</label> {% csrf_token %} 
         <input type="file" name=myfile class="filestyle" data-buttonName="btn-primary" data-buttonBefore="true" data-size="sm" accept="application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
          id="up"> 
        </div> 
        <div class="form-group"> 
         <button type="submit" class="btn btn-primary btn-block">Upload Data</button> 
         <button type="button" class="btn btn-primary btn-block">Download Template</button> 
        </div> 
       </form> 
+1

請爲您的問題選擇一個更合適的標題。 –

+0

你的模板不是上傳文件的字段'tempfile',而是'myfile'(以及應該是一個字符串:'') – dirkgroten

+0

嘗試學習使用調試工具,以便您可以檢查實際發佈的內容,使解決這類問題變得更加容易。例如。在代碼中使用'pdb'行來設置斷點,或使用django-debugger來檢查請求。 – dirkgroten

回答

1

怎麼樣使用forms.ModelForm instaed forms.Form這樣?

# forms.py 
class DocumentForm(forms.Model): 
    class Meta: 
     model = Document 
     fields = ['tempfile'] 

,讓你views.py這樣的:

# views.py 
def dataprocessing(request): 
    if request.method == 'POST': 
     form = DocumentForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
      return HttpResponse("success") 
     else: 
      return HttpResponse(form.errors.as_data()) 
    else: 
     form = DocumentForm() #A empty, unbound form 
    return render(request, 'dataprocessing.html', {'form': form}) 

這使得form對象可以直接保存到你的模型。

+0

嗨,我正在嘗試你的解決方案,並且提出這個'創建一個沒有'fields'屬性或'exclude'屬性的ModelForm是禁止的;表單DocumentForm需要更新.' 那麼這意味着我們必須創建至少1個字段? – gustav

+0

哦,對不起。我忘了。你可以簡單地使用'fields = ['tempfile']' – Beomi

+0

回答更新! – Beomi