django表单有多个文件字段

时间:2011-04-21 09:26:23

标签: python django django-forms

如何在Django中处理多个文件字段。例如,如果我只有一个表单字段,我会将request.FILES ['file']传递给处理函数。但是当有更多文件时,该怎么办?

3 个答案:

答案 0 :(得分:31)

我迟到了,但我一直试图弄清楚这一点,最后有一个解决方案。 看看这里使用的代码:https://code.djangoproject.com/ticket/12446

您可以使用getlist访问多部分值。如果我的HTML表单是:

<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="myfiles" multiple>
<input type="submit" name="upload" value="Upload">
</form>

我的django代码处理它看起来像:

for afile in request.FILES.getlist('myfiles'):
    # do something with afile

编写表单字段/窗口小部件以正确处理此问题是我的下一步。我仍然很喜欢使用Django,所以我正在学习。

答案 1 :(得分:9)

request.FILES.get('filename', None)响应存在这样的表单命名字段:

<input type="file" name="filename"></input>

如果你有两个这样的领域:

<input type="file" name="file1"></input>
<input type="file" name="file2"></input>

然后request.FILES.get('file1', None)request.FILES.get('file2', None)应分别为您提供这些文件。

原因是多部分哑剧。应该上传这三个部分(表单数据,文件1,文件2),Django的UploadFileHandler分别将其分为request.POSTrequest.FILES

答案 2 :(得分:0)

这是这个答案的一个很好的链接:https://github.com/Chive/django-multiupload。但是,由于我没有使用ModelForm,我不得不做一些改动。 在视图中,我已将下面的代码和保存的文件写入磁盘:

for each in form.cleaned_data['attachments']:
    handle_uploaded_file(each)

def uploadMyWork(request):
    from .forms import UploadFileForm, handle_uploaded_file
    print 'in uploadMyWork'

    if request.method == 'GET':
        print 'in uploadMyWork : GET'
        form = UploadFileForm()
    else:
        form = UploadFileForm(request.POST, request.FILES)
        print 'in uploadMyWork : POST'
        #for each in form.cleaned_data['attachments']:
        #    handle_uploaded_file(each)
        #return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"})

        if form.is_valid():
             print 'inside form valid'
             for each in form.cleaned_data['attachments']:
                 handle_uploaded_file(each)
             return render(request, 'stitchme/uploadMyWork.html', {'msg': "file uploaded successfully"})

    print 'returning to uploadmywork'
    return render(request, 'stitchme/uploadMyWork.html', {'form': form, 'msg':'hi'})