将多个文件绑定到Django ImageField表单小组件

时间:2018-05-29 08:41:58

标签: django forms input

以前我的Django表单有一个支持上传单个文件的字段:

image = forms.ImageField(required=False, help_text=_('Optional image (2.5 MB or less)'), allow_empty_file=True)

如果用户在提交表单后尝试编辑表单,我会通过将表单绑定到表单来显示以前上传的文件,如下所示:

if request.method == 'POST':
    ...
else:
    data = {'title': model.title}
    file = {'image': model.file}
    form = MyForm(data, file, instance=model)

要启用上传多个文件,我现在已将小部件更改为:

image = forms.ImageField(required=False, help_text=_('Optional image (2.5 MB or less)'), allow_empty_file=True, widget=forms.ClearableFileInput(attrs={'multiple': True}))

这在上传文件时效果很好,但在编辑文件时,我无法找到将多个文件绑定到表单的方法。

是否有使用当前窗口小部件的解决方案,还是涉及使用自定义或多个窗口小部件?

感谢。

1 个答案:

答案 0 :(得分:0)

使用标准小部件无法做到这一点。

启用ClearableFileInput的{​​{1}}可通过multiple访问所选文件。

初始化表单时,您可以将MultiValueDict绑定到MultiValueDict,但它只能绑定最后一个图像。这是因为小部件扩展了ImageField,其功能FileInput返回value_from_datadict(self, data, files, name),而不是files.get(name)

因此,简而言之,您必须提出自定义解决方案。 This answer让我看到了这一点。