2017-10-04 27 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