在django中保存多个上传的文件

时间:2013-11-23 13:38:40

标签: python django django-forms django-templates django-file-upload

我想在我的应用程序中上传和保存多个文件,我有     <input type="text" name="name" value="" />
<input type="file" name="file" multiple/>

   在我的模板中。当我点击上传时,似乎是 form = MyForm(request.POST, request.FILES)
只保存一个文件,它是许多已加载文件列表中的最后一个文件。如何使用form = MyForm(request.POST, request.FILES) blah blah表格保存所有上传的文件?感谢

修改
Myform是此模型的模型形式。

class Docs(models.Model):    
    name = models.CharField(max_length=128)
    file = models.FileField(max_length=100, upload_to="documents/")

2 个答案:

答案 0 :(得分:7)

您可以在MyFOrm中使用request.FILES['file']request.FILE.get('file')。他们只返回一个文件。

使用request.FILE.getlist('file')获取多个文件。


在您看来:

....
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')
...

答案 1 :(得分:1)

@faksetru的答案不包括save()方法。因此,如果要保存实例,则如下所示:

# 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')

有关更多详细信息,请参见official documentation of Django

更新:

我写了一个完整的答案here,请检查出来。