【问题标题】:save multiple uploaded files in django在 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/")

【问题讨论】:

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


    【解决方案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 来做到这一点。所以我添加了非表单辅助代码。
      猜你喜欢
      • 1970-01-01
      • 2021-10-11
      • 2015-07-05
      • 2017-01-24
      • 2021-08-08
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多