Django ImageField提交表单无报错但不上传文件问题求助
问题根因
enctype="multipart/form-data" 是HTML表单的属性,写在Django表单类的Meta配置中是无效的,Django不会识别这个参数。如果表单标签没有加该属性,浏览器不会传输选中的文件内容,后台request.FILES为空,又因为你的photo字段设置了blank=True,所以表单会直接校验通过不会报错,最终导致图片没有保存、数据库对应字段为空。
修复步骤
1. 修改模板表单标签
给HTML的<form>标签添加enctype属性,模板代码修改为:
<form method="post" enctype="multipart/form-data">{% csrf_token %} {{ form.as_p }} <input type="submit" value="Save"> </form>
2. 删除表单类无效配置
forms.py的Meta中不需要写enctype参数,修改后代码如下:
class CreateEnrichmentForm(forms.ModelForm): class Meta: model = Enrichment fields = ('name', 'photo', 'keywords')
3. 补充媒体配置(可选,解决后续图片访问问题)
你当前的settings.py只配置了MEDIA_ROOT,补充以下配置可确保后续能正常访问上传的图片:
- 给settings.py添加:
MEDIA_URL = '/media/'
- 在项目根目录的urls.py中添加媒体资源路由:
from django.conf import settings from django.conf.urls.static import static urlpatterns = [ # 此处保留你原有所有路由配置 ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
内容的提问来源于stack exchange,提问作者CharleyM
相关产品推荐
相关产品推荐

