Django 表单 FileField 错误“此字段是必需的”

use*_*734 5 forms django validation file-upload

我使用 django 生成的表单视图收到 This field is required 错误。
我有一个扫描模型,如下所示:

class Scan(models.Model):
    device = models.ForeignKey(Device, null=True, on_delete=models.SET_NULL)
    created_at = models.DateTimeField('Created', auto_now=True)
    data = models.FileField(upload_to='uploads/')

    def __str__(self):
        return str("{}-{}".format(self.device, self.created_at))
Run Code Online (Sandbox Code Playgroud)

我定义了一个 CreateView:

class ScanCreate(LoginRequiredMixin, CreateView):
    model = Scan
    fields = '__all__'
Run Code Online (Sandbox Code Playgroud)

我的网址路线是

urlpatterns = [
    ...
    path('scan/create/', views.ScanCreate.as_view(), name='scan-create'),
    ...
]
Run Code Online (Sandbox Code Playgroud)

最后是 scan_form.html 模板

    {% block content %}
  <form action="" method="post">
    {% csrf_token %}
    <table>
    {{ form.as_table }}
    </table>
    <input type="submit" value="Submit">
  </form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

在选择要上传的文件并提交表单时,我收到“此字段为必填字段”。错误并且请求失败:

提交后“此字段为必填项。”  错误 该文件已被选择上传,那么为什么需要 django 报告字段?

Naz*_*ter 10

您代码中的主要问题是您没有enctype="multipart/form-data"在表单中使用,因此当请求发送到服务器时,集合中没有该文件request.FILES

你必须为你的表单编写 html 代码,如下所示:

{% block content %}
  <form action="" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <table>
    {{ form.as_table }}
    </table>
    <input type="submit" value="Submit">
  </form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

并确保操作指向正确的 URL。

最后,这是文件上传的文档:https://docs.djangoproject.com/en/stable/topics/http/file-uploads/