Tengo un formulario crujiente con un campo de entrada de imagen que acepta varias imágenes:
images = forms.ImageField(widget=forms.FileInput(attrs={'class': 'form-control', 'multiple': True}), required=False)
El formulario funciona perfectamente bien y las imágenes se cargan y se pueden procesar en el backend.
Sin embargo, hay un error de interfaz extraño: por lo general, cuando selecciona varias imágenes para cargar en un campo de imagen crujiente, muestra todos los nombres de archivo de las imágenes seleccionadas como una lista en ese widget. Sin embargo, en mi caso, solo muestra el nombre de uno de los archivos, varias veces (para ser precisos: para cada archivo seleccionado, muestra el nombre de uno de los archivos una vez).
Por ejemplo, si selecciono tres archivos con nombres diferentes, uno de los cuales se llama 'kangaroo.png', el widget se ve así: 
Ahora he precisado el problema a este pequeño fragmento:
<div class="custom-file "> <input type="file" name="images" class="form-control fileinput fileUpload form-control-file custom-file-input" multiple accept="image/*" id="id_images"> <label class="custom-file-label" for="id_images">Choose file</label> <script type="text/javascript" id="script-id_images"> document.getElementById("script-id_images").parentNode.querySelector('.custom-file-input').onchange = function (e){ var filenames = ""; for (let i=0;i<e.target.files.length;i++){ filenames+=(i>0?", ":"")+e.target.files[0].name; } e.target.parentNode.querySelector('.custom-file-label').innerHTML=filenames; } </script> </div> El problema radica en la línea que dice: filenames+=(i>0?", ":"")+e.target.files[0].name; .
Debería ser claramente: filenames+=(i>0?", ":"")+e.target.files[i].name; .
Y, por supuesto, cuando investigué el código de los formularios crujientes, encontré el código correcto usando i como índice en lugar de 0. (La ruta a ese archivo es crispy_forms\templates\bootstrap4\layout\field_file.html en caso de que quiera echar un vistazo)
Así que ahora me pregunto, ¿qué pasó? ¿Dónde cambió la i a un 0? ¿Se trata de un error con formularios crujientes que debe informarse o el problema podría estar dentro de mi proyecto?
Editar: Este fue un error en las versiones de django anteriores a 1.9.1 que se corrigió en este compromiso .