为什么我要这个字段是必需的' Django模型中的错误,我的代码中是否有错误?

时间:2018-03-13 19:02:50

标签: django

所以我试图制作用户表单,用户可以在模型中使用文件字段上传图片。我正在选择一张图片,但仍然表示需要此字段(提交表格后)并卸载图片。

models.py:

# These are our database files for the Incubator Portal
class Incubators(models.Model):
    incubator_name = models.CharField(max_length=30)
    owner = models.CharField(max_length=30)
    city_location = models.CharField(max_length=30)
    description = models.TextField(max_length=100)
    logo = models.FileField()
    verify = models.BooleanField(default = False)

    def get_absolute_url(self):
        return reverse('main:details', kwargs={'pk': self.pk})

培养箱-form.html

<form method="post" novalidate>
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Submit</button>
</form>

我在网站的主要urls.py中添加了以下代码:

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

并将以下内容添加到settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

我甚至在项目目录中创建了媒体文件夹。我有另一个具有相同FileField的类,它可以正常工作。问题只出在这堂课上。

1 个答案:

答案 0 :(得分:1)

您在表单标记上缺少enctype属性,这意味着文件上传永远不会到达Django。来自documentation

  

请注意,request.FILES只会在请求方法为POST且发布请求的<form>具有属性enctype="multipart/form-data"时才包含数据。否则,request.FILES将为空。

您需要更新表单标记,如下所示:

<form method="post" novalidate enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>