【问题标题】:Save multiple files using FileField使用 FileField 保存多个文件
【发布时间】:2023-03-30 11:14:02
【问题描述】:

在现有表单中,我使用FileField 附加不同类型的文件.txt, .pdf, .png, .jpg, etc 并且工作正常,但现在我需要该字段来接受多个文件,所以我使用属性multiple 输入以接受更多一个文件,但是当存储在我的数据库中时,只存储了第一个选定文件的路径,并且在媒体文件夹中只存储了一个文件,没有其他文件,这就是我所拥有的:

forms.py
class MyForm(forms.Form):
    attachment = forms.FileField(required=False,widget=forms.ClearableFileInput(attrs={'multiple': True}))

models.py
class MyFormModel(models.Model):
    attachment = models.FileField(upload_to='path/', blank=True)

是否可以将所有路径以这种方式path/file1.txt,path/file2.jpg,path/file3.pdf 分开存储在数据库中并将三个文件存储在媒体文件夹中?我需要一个自定义的FileField 来处理这个还是视图是我需要处理这个的地方?

编辑:@harmaahylje 给我的答案出现在文档中,但不适用于我使用 1.8 的版本,这会影响解决方案吗?

【问题讨论】:

    标签: django django-models django-forms django-views


    【解决方案1】:

    forms.py中做这样的事情:

    class FileFieldForm(forms.Form):
        attachment = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
    

    【讨论】:

    • 这允许我进行多选输入,但在数据库中只存储多个文件之一的路径以及我的媒体文件夹中的一个文件。
    • 你是对的。问题的实际解决方案是我的回答与下面@harmaahylje 的回答相结合
    【解决方案2】:

    Django 文档有解决方案https://docs.djangoproject.com/en/dev/topics/http/file-uploads/#uploading-multiple-files

    在你看来:

    def post(self, request, *args, **kwargs):
            form_class = self.get_form_class()
            form = self.get_form(form_class)
            files = request.FILES.getlist('file_field')
            if form.is_valid():
                for f in files:
                    ...  # Do something with each file.
                return self.form_valid(form)
            else:
                return self.form_invalid(form)
    

    【讨论】:

    • 好吧,在# Do something with each file. 部分,我尝试在附件字段中分配 f 文件,但仍然只有一条路径,我想念该做什么。
    • @M.Gar 您需要为每个文件创建一个新对象。 MyFormModel.objects.create(attachment=f)
    • 这给了我这个错误Manager isn't accessible via MyFormModel instances
    • 我尝试使用模型而不是实例,现在给我这个错误save() got an unexpected keyword argument 'force_insert'
    • @M.Gar 请贴一些代码,你想做什么。
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2011-09-08
    • 2017-01-03
    • 2014-08-09
    • 2011-12-12
    相关资源
    最近更新 更多