From b00c2e07fd12e1f96ec71a6d726cafe5c84c1f3c Mon Sep 17 00:00:00 2001 From: Alexandre Iooss Date: Sat, 5 Aug 2023 13:42:28 +0200 Subject: [PATCH] Fix multiple files upload --- photologue/forms.py | 37 +++++++++++++++++++++++++++---------- photologue/views.py | 5 +---- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/photologue/forms.py b/photologue/forms.py index d21e8b1..3749704 100644 --- a/photologue/forms.py +++ b/photologue/forms.py @@ -13,17 +13,34 @@ from django.utils.translation import gettext_lazy as _ from .models import Gallery, Tag +class MultipleFileInput(forms.ClearableFileInput): + allow_multiple_selected = True + + +class MultipleFileField(forms.FileField): + def __init__(self, *args, **kwargs): + kwargs.setdefault( + "widget", + MultipleFileInput( + attrs={ + "accept": "image/*", + "class": "mb-3", + } + ), + ) + super().__init__(*args, **kwargs) + + def clean(self, data, initial=None): + single_file_clean = super().clean + if isinstance(data, (list, tuple)): + result = [single_file_clean(d, initial) for d in data] + else: + result = single_file_clean(data, initial) + return result + + class UploadForm(forms.Form): - file_field = forms.FileField( - label="", - widget=forms.FileInput( - attrs={ - "accept": "image/*", - "multiple": True, - "class": "mb-3", - } - ), - ) + file_field = MultipleFileField(label="") gallery = forms.ModelChoiceField( Gallery.objects.all(), label=_("Gallery"), diff --git a/photologue/views.py b/photologue/views.py index 4ea27a2..088b40c 100644 --- a/photologue/views.py +++ b/photologue/views.py @@ -188,10 +188,6 @@ class GalleryUpload(PermissionRequiredMixin, FormView): permission_required = "photologue.add_gallery" def form_valid(self, form): - # Upload photos - # We take files from the request to support multiple upload - files = self.request.FILES.getlist("file_field") - # Get or create gallery gallery = form.get_or_create_gallery() gallery_year = Path(str(gallery.date_start.year)) @@ -200,6 +196,7 @@ class GalleryUpload(PermissionRequiredMixin, FormView): # Upload pictures uploaded_photo_name = [] already_exists = 0 + files = form.cleaned_data["file_field"] for photo_file in files: # Check that we have a valid image try: