From 27983d82c2415f02d962649b6623a20493b1790b Mon Sep 17 00:00:00 2001 From: Berker Peksag Date: Sun, 15 May 2016 10:03:31 +0300 Subject: [PATCH] [1.10.x] Fixed #26604 -- Added a multiple file upload example to topics/http/file-uploads.txt. Backport of 54febdb8be7c9793caae9c781f4d6b7cbbdcd900 from master --- docs/topics/http/file-uploads.txt | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/docs/topics/http/file-uploads.txt b/docs/topics/http/file-uploads.txt index 06ec03ee61..4b13b292ba 100644 --- a/docs/topics/http/file-uploads.txt +++ b/docs/topics/http/file-uploads.txt @@ -122,6 +122,46 @@ field in the model:: form = UploadFileForm() return render(request, 'upload.html', {'form': form}) +Uploading multiple files +------------------------ + +If you want to upload multiple files using one form field, set the ``multiple`` +HTML attribute of field's widget: + +.. snippet:: + :filename: forms.py + + from django import forms + + class FileFieldForm(forms.Form): + file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True})) + +Then override the ``post`` method of your +:class:`~django.views.generic.edit.FormView` subclass to handle multiple file +uploads: + +.. snippet:: + :filename: views.py + + from django.views.generic.edit import FormView + from .forms import FileFieldForm + + class FileFieldView(FormView): + form_class = FileFieldForm + template_name = 'upload.html' # Replace with your template. + success_url = '...' # Replace with your URL or reverse(). + + def post(self, request, *args, **kwargs): + form_class = self.get_form_class() + form = self.get_form(form_class) + files = request.FILES.getlist('file_field') + if form.is_valid(): + for f in files: + ... # Do something with each file. + return self.form_valid(form) + else: + return self.form_invalid(form) + Upload Handlers ===============