以前我的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}))
这在上传文件时效果很好,但在编辑文件时,我无法找到将多个文件绑定到表单的方法。
是否有使用当前窗口小部件的解决方案,还是涉及使用自定义或多个窗口小部件?
感谢。
答案 0 :(得分:0)
使用标准小部件无法做到这一点。
启用ClearableFileInput
的{{1}}可通过multiple
访问所选文件。
初始化表单时,您可以将MultiValueDict
绑定到MultiValueDict
,但它只能绑定最后一个图像。这是因为小部件扩展了ImageField
,其功能FileInput
返回value_from_datadict(self, data, files, name)
,而不是files.get(name)
。
因此,简而言之,您必须提出自定义解决方案。 This answer让我看到了这一点。