Django2 ModelForm表单无法上传图片问题求助
Django ModelForm 图片上传问题排查与解决
我来帮你梳理并解决这个图片上传的问题,从你的代码里能看到几个关键的配置和逻辑错误,咱们一步步来修复:
1. 视图中未传递文件对象给UserExtentionForm
在你的registration视图里,form2只接收了request.POST,但文件上传必须把request.FILES也传给表单,否则表单无法获取到上传的图片文件,自然不会执行保存操作。
修改views.py里的form2初始化代码:
form2 = UserExtentionForm(request.POST or None, request.FILES or None)
2. MEDIA_ROOT 配置错误
你的settings.py里MEDIA_ROOT设置成了'/media/',这是系统根目录下的media文件夹,通常不是我们项目需要的路径,而且可能会有权限问题。应该设置为项目根目录下的media文件夹:
import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/'
别忘了手动在项目根目录创建media文件夹,并且确保Django有写入这个文件夹的权限。
3. 开发环境下配置Media文件的访问路由
即使修复了上面两点,admin后台可能还是无法正确访问上传的图片,因为Django在开发环境下不会自动处理media文件的静态访问。需要在项目的urls.py里添加media文件的路由配置:
from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), path('registration/', views.registration, name='registration'), # 其他你的路由... ] # 开发环境下添加media文件的访问支持 if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
验证修复效果
完成以上修改后:
- 前端提交表单时,图片会被正确保存到
media/pictures/对应的子文件夹,同时数据库里会存储图片的相对路径 - admin后台上传的图片也会保存到指定的media文件夹,并且可以正常预览
最后提醒一下:生产环境下不要用这种方式处理media文件,应该用Nginx或者其他静态文件服务器来托管,但开发环境这样配置就足够了。
内容的提问来源于stack exchange,提问作者Robin Joseph
相关产品推荐
相关产品推荐

