Django 使用FileField保存多个文件
在现有表单中,我使用Django 使用FileField保存多个文件,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,在现有表单中,我使用文件字段附加不同类型的文件.txt、.pdf、.png、.jpg等,工作正常,但现在我需要该字段来接受多个文件,因此,我使用属性multiple进行输入,以接受一个文件中的多个文件,但当存储在我的数据库中时,仅存储第一个选定文件的路径,而在媒体文件夹中仅存储一个文件,而其他文件则不存储,这就是我拥有的: forms.py class MyForm(forms.Form): attachment = forms.FileField(required=False,widg
文件字段
附加不同类型的文件.txt、.pdf、.png、.jpg等
,工作正常,但现在我需要该字段来接受多个文件,因此,我使用属性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
并将这三个文件存储在媒体文件夹中?我需要一个自定义的文件字段来处理这个问题,还是需要在视图中处理这个问题
编辑:文档中有@harmaahylje给我的答案,但不是我使用的1.8版本,这会影响解决方案吗?在表单中执行类似操作。py
:
class FileFieldForm(forms.Form):
attachment = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
Django文档提供了解决方案
在你看来:
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)
这允许我进行多选输入,但在数据库中只存储多个文件之一的路径,以及媒体文件夹中的一个文件。你说得对。这个问题的实际解决方案是我的答案与下面的@harmaahylje的答案结合在一起,在#对每个文件做点什么。
部分我尝试在附件字段中分配f文件,但仍然只有一条路径,我没有做什么。@M.Gar您需要为每个文件创建一个新对象MyFormModel.objects.create(attachment=f)
导致此错误的管理器无法通过MyFormModel实例访问。我尝试使用模型而不是实例,现在出现此错误save()得到一个意外的关键字参数“force\u insert”
@M.Gar请发布一些代码,你想做什么。