9

我想在我的应用程序中上传和保存多个文件, 我的模板中有。当我点击上传时,似乎 只保存了许多已加载文件列表中最后一个文件。如何使用表单保存所有上传的文件?谢谢
<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/")
4

2 回答 2

13

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

用于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')
...
于 2013-11-23T13:44:17.823 回答
3

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

更多详细信息请参考Django 的官方文档

更新:

我在这里写了一个完整的答案,请检查一下。

于 2018-08-25T10:10:07.713 回答