【问题标题】:Django form FileField error 'This Field is required'Django 表单 FileField 错误“此字段是必需的”
【发布时间】:2019-06-11 02:33:55
【问题描述】:

我在使用 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__'

我的url路由是

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 %}

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

该文件已被选择上传,为什么需要 django 报告字段?

【问题讨论】:

  • auto_now 将字段设置为editable=False iirc。
  • 感谢 Willem,我尝试传递 editable=True,但没有效果。删除 auto_add 确实会显示该字段,但没有我需要的默认值。我可以让该字段出现并包含默认值吗?
  • 我想你误会了。通过将其设置为auto_now,您基本上可以指定这是不可编辑的字段。所以它确实不应该出现。
  • 我现在明白了。似乎错误消息可能适用于data FileField,更新问题。

标签: django forms validation file-upload


【解决方案1】:

您代码中的主要问题是您没有在表单中使用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 %}

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

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

【讨论】:

    猜你喜欢
    • 2011-08-13
    • 2020-06-02
    • 2019-04-13
    • 2016-04-29
    • 2012-12-02
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    相关资源
    最近更新 更多