I want to upload and save multiple files in my application, I have<input type="text" name="name" value="" />
<input type="file" name="file" multiple/>
in my template. when I hit upload, seems form = MyForm(request.POST, request.FILES)
is only saving one file which is last in the list of the many uloaded files. How can I be able to save all the uploaded files using the form form = MyForm(request.POST, request.FILES) blah blah
? Thanks
Edit Myform
is a model form from this model.
class Docs(models.Model):
name = models.CharField(max_length=128)
file = models.FileField(max_length=100, upload_to="documents/")
Here is a quick example of how to add a multiple file form to your Django application. Most multiple-upload front-ends were created without Django in mind, so interfacing with tools is not always straightforward as it might be with a different language.
You maybe use request.FILES['file']
or request.FILE.get('file')
in MyFOrm. They only return a file.
Use request.FILE.getlist('file')
to get multiple files.
In your view:
....
form = MyForm(request.POST, request.FILES)
if form.is_valid():
name = form.cleaned_data['name']
for f in request.FILES.getlist('file'):
Docs.objects.create(name=name, file=f)
return HttpResponse('OK')
...
The answer of @faksetru does not include save() method. So if you want to save your instace, it looks like this:
# in views.py
from .models import Docs
...
form = MyForm(request.POST, request.FILES)
if form.is_valid():
name = form.cleaned_data['name']
for f in request.FILES.getlist('file'):
instance = Docs(name=name, file=f)
instance.save()
return HttpResponse('OK')
For the more details refer to official documentation of Django.
UPDATE:
I wrote a full answer here, please check it out.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With