使用FileField保存多个文件

时间:2017-08-15 18:21:31

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

在现有表单中,我使用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这会影响解决方案吗?

2 个答案:

答案 0 :(得分:1)

forms.py

中执行类似的操作
class FileFieldForm(forms.Form):
    attachment = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))

答案 1 :(得分:1)

Django docs有解决方案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)