Python 通过Django formset上载多个文件-多值DictKeyError
试图制作一个能够处理多个文件上传并将其存储到标准位置的应用程序,但我遇到了一个问题。提交表单时,django在/pdfchecker处返回“MultiValueDictKeyError”/ “'docfile'” forms.pyPython 通过Django formset上载多个文件-多值DictKeyError,python,django,file,upload,formset,Python,Django,File,Upload,Formset,试图制作一个能够处理多个文件上传并将其存储到标准位置的应用程序,但我遇到了一个问题。提交表单时,django在/pdfchecker处返回“MultiValueDictKeyError”/ “'docfile'” forms.py from django import forms class UploadPdf(forms.Form): docfile = forms.FileField(label='Browse') class UploadPdfUrl(forms.For
from django import forms
class UploadPdf(forms.Form):
docfile = forms.FileField(label='Browse')
class UploadPdfUrl(forms.Form):
docurl = forms.URLField(label='Address')
modelys.py
from django.db import models
class handle_UploadPdf(models.Model):
docfile = models.FileField(upload_to='.')
views.py
def上传(请求):
HTML模板:
<div class="f_unify">
<form class="simpleform" action="" method="post" enctype="multipart/form-data">
{{ formsetFile.management_form }}
{% for form in formsetFile.forms %}
<fieldset class="mainfieldset">
<legend class="outer">
<span class="legendtext">Check by URI</span>
</legend>
<div class="singlerow">
{% csrf_token %}
{{ formURL.as_table }}
<input type="submit" value="Check" />
</div>
<span class="description">(<cite>http://www.egovmon.no/test.pdf</cite>)</span>
</fieldset>
{% endfor %}
</form>
<form class="simpleform" action="." method="post" enctype="multipart/form-data">
{{ formsetFile.management_form }}
{% for form in formsetFile.forms %}
<fieldset class="mainfieldset">
<legend class="outer">
<span class="legendtext">Check by File Upload</span>
</legend>
<div class="singlerow">
<div class="table">
<input type="submit" value="Check" />
<table class='no_error'>
{% csrf_token %}
{{ formsetFile.as_p }}
</table>
</div>
</div>
</fieldset>
{% endfor %}
<script>
var maxRows = 10;
var i = 1;
$('#add_more').click(function() {
if(i < maxRows) {
cloneMore('div.table:last', 'service' + i++);
}
else {
alert('You can only upload 10 files per instance')
}
})
</script>
</form>
</div>
错误:
Error:
MultiValueDictKeyError at /pdfchecker/
"'docfile'"
Request Method: POST
Request URL: http://tt5.s.tingtun.no:7842/pdfchecker/
Django Version: 1.6.1
Exception Type: MultiValueDictKeyError
Exception Value:
"'docfile'"
Exception Location: /usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py in __getitem__, line 301
Python Executable: /usr/bin/python
Python Version: 2.7.6
Python Path:
['/home/student/django/1utkast/src',
'/usr/local/lib/python2.7/dist-packages/TingtunUtils-0.1-py2.7.egg',
'/usr/local/lib/python2.7/dist-packages/requests-2.0.1-py2.7.egg',
'/usr/local/lib/python2.7/dist-packages/setuptools-2.0.1-py2.7.egg',
'/usr/local/lib/python2.7/dist-packages/pip-1.4.1-py2.7.egg',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-x86_64-linux-gnu',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PILcompat',
'/usr/lib/pymodules/python2.7']
Server time: Mon, 28 Apr 2014 14:10:07 +0000
回溯:
Traceback Switch to copy-and-paste view
/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
...
▶ Local vars
/home/student/django/1utkast/src/pdfchecker/views.py in upload
newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])
...
▶ Local vars
/usr/local/lib/python2.7/dist-packages/django/utils/datastructures.py in __getitem__
raise MultiValueDictKeyError(repr(key))
...
▶ Local vars
在views.py中
request.FILES['docfile']
引发多值DictKeyError,其中
if request.method == 'POST':
formsetFile = UploadPdfFormSet(request.POST, request.FILES)
if formsetFile.is_valid():
newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])
newdoc.save()
return HttpResponse('yey')
此代码段不检查请求的文件是否包含文件“docfile”,因此它给出了多值错误。因此,如果您在前面检查request.FILES中是否有“docfile”,那么它将解决错误
if formsetFile.is_valid() and 'docfile' in request.FILES:
newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])
newdoc.save()
因为如果request.FILES['docfile']不在request.FILES中,它就不会编译still@rajasimon不。我修好了。不记得是怎么回事。哈哈。请在你的代码应答中添加一些描述,欢迎使用SO!虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的附加上下文将提高答案的长期价值。请仔细阅读,不便之处,敬请谅解。非常感谢您为我提供的资源。
if request.method == 'POST':
formsetFile = UploadPdfFormSet(request.POST, request.FILES)
if formsetFile.is_valid():
newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])
newdoc.save()
return HttpResponse('yey')
if formsetFile.is_valid() and 'docfile' in request.FILES:
newdoc = handle_UploadPdf(docfile = request.FILES['docfile'])
newdoc.save()