Django表单FileField错误'此字段为必填项'

时间:2019-01-16 22:59:46

标签: django forms validation file-upload

我正在使用django生成的表单视图接收此字段为必填错误。
我有一个看起来像的扫描模型:

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))

我定义了一个CreateView:

class ScanCreate(LoginRequiredMixin, CreateView):
    model = Scan
    fields = '__all__'

我的网址路由是

urlpatterns = [
    ...
    path('scan/create/', views.ScanCreate.as_view(), name='scan-create'),
    ...
]

最后是一个scan_form.html模板

    {% block content %}
  <form action="" method="post">
    {% csrf_token %}
    <table>
    {{ form.as_table }}
    </table>
    <input type="submit" value="Submit">
  </form>
{% endblock %}

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

post submission 'This field is required.' error 已选择要上传的文件,为什么需要django报告字段?

1 个答案:

答案 0 :(得分:1)

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

您必须像这样为表单编写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 %}

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

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