Django+dropzone.js:多个文件的表单验证失败
我正在尝试使用dropzone.js在一个请求中上载多个文件。当我在dropzone中将uploadMultiple选项设置为true时,一个包含这两个文件的请求被发送到我的视图,但表单验证失败 这是我的Django表格:Django+dropzone.js:多个文件的表单验证失败,django,dropzone.js,Django,Dropzone.js,我正在尝试使用dropzone.js在一个请求中上载多个文件。当我在dropzone中将uploadMultiple选项设置为true时,一个包含这两个文件的请求被发送到我的视图,但表单验证失败 这是我的Django表格: class UploadForm(forms.Form): data = forms.IntegerField(widget=forms.HiddenInput()) file = forms.FileField() 我的看法是: def upload(reques
class UploadForm(forms.Form):
data = forms.IntegerField(widget=forms.HiddenInput())
file = forms.FileField()
我的看法是:
def upload(request):
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
print request.FILES
if form.is_valid():
for file in request.FILES.getlist('file'):
print str(file)
else:
print form.errors
else:
form = UploadForm(initial={'data': 5})
return render(request, 'upload.html', {
'form': form
})
和我的模板:
<script type="text/javascript">
Dropzone.options.myAwesomeDropzone = {
autoProcessQueue : false,
uploadMultiple: true,
init : function() {
myDropzone = this;
this.element.querySelector("input[type='submit']").addEventListener('click', function(event) {
event.preventDefault();
event.stopPropagation();
myDropzone.processQueue();
});
}
}
</script>
<form id='my-awesome-dropzone' class="dropzone"
action="{% url 'upload.views.upload' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.data }}
<input type="submit" value="Upload" />
</form>
我想问题是Django无法识别文件[]。它需要的是文件。如何让Django识别这两次上传?您只需执行以下操作:
file1 = request.FILES.get(file[][0], None) # For the first file
file2 = request.FILES.get(file[][1], None) # For the second file
。。。等等
希望能有所帮助。假设验证错误是由发送到服务器的输入名dropzone.js引起的,您是对的。Django表单需要名为file的字段时,file[n]模式会抛出一个验证错误必填字段 在Dropzone.js中,您可以指定参数paramName,并且此对象属性也接受函数而不是简单字符串,因此如果您将paramName设置为类似以下内容:
...
paramName: function(){
return "file";
}
...
发送到服务器的字段的名称不会更改,并且您会在request.FILES中获得一个文件字段,该字段是一个dict,其中包含一个元素文件,它是预期的文件数组。您肯定可以进行多文件上载。我以前用dropzone和django做过,但是我现在不在办公室,所以我不能复制代码的重要方面来给你提示。我记得我是从这篇文章开始开发的:-它应该可以回答您的最后一个问题您可以在request.FILES.getlist'file[]中使用这个文件:printstrfile@furins,我已经用django模板实现了dropzone,但是图像没有在服务器端上传。你能告诉我出了什么问题吗。我也浏览了你提到的链接also@MegaBytes:您是否收到特定错误?你有一些代码,我可以看看,以便复制它?最后,请考虑打开一个新的问题,如果它与USER 223 3706中的一个或机械工具的不同。@ Furin,MultValueDeCICTKEY错误在/SaveIsVase/并且在请求中没有文件数据,是肯定的,我用代码片段来提出一个新的问题。
...
paramName: function(){
return "file";
}
...