这是我的表格:
from django import forms
class UploadFileForm(forms.Form):
titl = forms.CharField(max_length=50)
ffile = forms.FileField()
这是我的views.py文件:
def handle_uploaded_file(file_path):
print "handle_uploaded_file"
dest = open(file_path.name,"wb")
for chunk in file_path.chunks():
dest.write(chunk)
dest.close()
def handle_upload(request):
c = {}
c.update(csrf(request))
if request.method == "POST":
form = UploadFileForm(request.POST)
if form.is_valid():
handle_uploaded_file(request.FILES["ffile"])
return HttpResponseRedirect("/thanks")
else:
form = UploadFileForm()
c.update({"form":form})
return render_to_response("upload.html",c)
这是upload.html的内容:
<form enctype="multipart/form-data" method="post" action="/handle_upload/">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Upload it"/>
</form>
每当我尝试提交表单时,ffile
字段都会显示“此字段是必填字段”。我究竟做错了什么?简而言之,我每次都会上传一个文件。
答案 0 :(得分:44)
仅供将来参考。虽然我在表单初始化中包含request.FILES
,但我遇到了同样的错误。问题出在模板中:我忘了将enctype="multipart/form-data"
属性添加到<form>
标记。
答案 1 :(得分:30)
form = UploadFileForm(request.POST, request.FILES)
答案 2 :(得分:0)
如果您已添加request.FILES
并添加enctype="multipart/form-data"
,但仍然看到此错误,则可能是您未正确声明<input>
。
例如,如果在模板中明确声明输入html,如:
<input type="file" value="Upload CSV File" />
您可能没有传递输入表单元素的预期输入ID或名称属性。
确保您的模板使用表单元素标记,即{{ form.file }}
,
然后django会在页面上呈现为:<input id="id_file" name="file" type="file" required="">
。