在 django 中保存多个上传的文件
Posted
技术标签:
【中文标题】在 django 中保存多个上传的文件【英文标题】:save multiple uploaded files in django 【发布时间】:2013-12-08 09:41:12 【问题描述】:我想在我的应用程序中上传和保存多个文件,我有<input type="text" name="name" value="" />
<input type="file" name="file" multiple/>
在我的模板中。当我点击上传时,似乎 form = MyForm(request.POST, request.FILES)
仅保存一个文件,该文件在许多 uloaded 文件列表中的最后一个文件。如何使用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/")
【问题讨论】:
【参考方案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,请查看。
【讨论】:
【参考方案2】:您可以在 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')
...
【讨论】:
谢谢@falsetru,如何使用表单保存文件? @AlexKasina,正如我在你的问题中评论的那样,没有MyForm
代码很难回答。
@AlexKasina,定义一个方法save
(例如)以某种方式使用request.FILE.getlist
。 (我只能这样回答)
@AlexKasina,如果上传多个文件,是否要创建多个 Docs
对象?
@AlexKasina,我添加了一个代码。我不确定如何使用 ModelForm 来做到这一点。所以我添加了非表单辅助代码。以上是关于在 django 中保存多个上传的文件的主要内容,如果未能解决你的问题,请参考以下文章