这可能是一个非常简单的答案的问题,但是我无法在互联网上看到它。
我正在编写一个Django应用程序。我有一个带有不需要的ImageField的表单。在用户提交表单(带有图像)后,如果表单无效,则在服务器端使用请求数据和文件填充表单(例如:form = FooForm(request.DATA, request.FILES, instance = foo
)并将响应发送回客户端。
在客户端上,其他字段显示正常,但图像字段未指向任何位置。由于不需要图像字段,用户通常会忽略该情况并重新提交没有图像的表单。
即使这是一个问题,我仍然迷失方向,或者无论如何这都是预期的。如果这是一个问题,请说明以便我提供更多详细信息。
答案 0 :(得分:1)
这是浏览器安全工作方式不可避免的结果。任何服务器端系统都不可能设置文件上载字段的初始值,就像对任何其他输入字段一样。这是为了阻止恶意网站在未经您许可的情况下从您的计算机上传内容 - 否则,网站可能会将该字段设置为默认密码文件,例如。
显然,如果你真的想要用户上传的文件,这是一个问题 - 如果表单最初无效,它将不会被保存,并且第二次通过文件将丢失,除非用户上传它再次。一种可能的解决方案可能是将文件上载作为第二页放在自己的表单上 - 一旦表单经过验证并保存,将显示第二个表单,其中只有文件。 Trac bugtracker的工作原理是这样,在主表单上有一个“我有一个要上传的文件”的复选框,如果选中该复选框,则将用户带到该表单。