Django表单文件字段在表单错误时消失

San*_*ago 15 django validation file-upload django-forms

这是问题,我有一个包含File字段的Django表单,即:

photo = forms.FileField(help_text="Please attach a photo", required=False)
Run Code Online (Sandbox Code Playgroud)

如果表单有效,则"文件"字段将被绑定并正确保存.问题是当用户填写所有表单但未验证时:所选文件的路径消失.

因此,如果用户没有意识到这一点,他/她会修复其他字段错误并再次提交 - 这次没有照片.

以防万一,表单在视图中创建如下:

ProfileForm(request.POST or None, request.FILES or None)
Run Code Online (Sandbox Code Playgroud)

而HTML是:

<div id="uniform-id_photo" class="uploader">
  <input id="id_photo" class="clearablefileinput" type="file" name="photo" size="19" style="opacity: 0;">
  <span class="filename" style="-moz-user-select: none;">No file selected</span>
  <span class="action" style="-moz-user-select: none;">Choose File</span>
</div>
Run Code Online (Sandbox Code Playgroud)

以前有人遇到过同样的问题吗?对解决方案的任何想法?:)

谢谢!

Mic*_*nor 27

不幸的是,这是浏览器强加的问题(实际上是一种安全特性),并且不可解决.浏览器不允许您为文件输入指定初始值,并且您无法通过它来解决这个问题.

原因是,如果一个网站可以做到这一点,它将打开一个矢量,允许任何网站通过猜测文件路径窃取您的计算机上的任何文件 - 他们可能只是在后台运行的脚本试图发布有趣的文件回到服务器.

唯一的解决方法是将上传的文件实际保存在服务器上,无论表单是否验证,然后当您将表单和错误呈现给用户时,表明您已收到文件并且他们应该只填写该字段替换它.

  • 另一种解决方法是执行 AJAX 请求来验证表单。 (3认同)