Django模板上传图片无法保存到指定media目录,后台上传正常
问题根源
你调用QuerySet.update()方法更新ImageField字段时,Django 不会触发字段的文件上传处理逻辑:
update()属于底层SQL操作,直接把原始文件名写入数据库,不会自动按照upload_to指定的路径存储文件,也不会生成带路径前缀的存储地址- 只有调用模型实例的
save()方法时,才会自动处理文件存储、拼接upload_to路径,最终生成正确的/media/images/profile/xxx.jpg格式的访问地址
修复方案
1. 修改视图逻辑,改用实例save方法保存数据
将你的editProfile视图调整为如下写法:
def editProfile(request): if request.method == 'POST': profilePicture = request.FILES['pp'] # 先获取对应用户的About实例 user_profile = About.objects.get(user=request.user) # 给字段赋值触发文件处理逻辑 user_profile.profilePicture = profilePicture # 调用save方法才会自动存储文件到指定目录、生成正确路径 user_profile.save() # more code...
2. 确认基础配置正常
首先检查settings.py是否配置了正确的媒体文件参数:
# settings.py MEDIA_ROOT = BASE_DIR / 'media' # 媒体文件存储根目录 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)
修改完成后上传的图片就会自动保存到/media/images/profile/目录下,访问路径也会正常生成。
内容的提问来源于stack exchange,提问作者Asif Biswas
相关产品推荐
相关产品推荐

