所以我试图制作用户表单,用户可以在模型中使用文件字段上传图片。我正在选择一张图片,但仍然表示需要此字段(提交表格后)并卸载图片。
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的类,它可以正常工作。问题只出在这堂课上。
答案 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>