Django使用ModelForm提交表单时头像图片无法保存问题求助
错误原因
你的UserForm在Meta配置中绑定的是Django内置的User模型,但avatar字段并不属于User模型,而是存放在你自定义的Profile关联模型中,表单提交的头像数据没有对应存储的字段,因此无法正常保存。
修复方案
1. 修改视图文件 views.py
表单验证通过后,手动将头像数据赋值给当前用户关联的Profile对象再保存:
def Profile(request): if request.method == "POST": profile = UserForm(request.POST, request.FILES, instance=request.user) if profile.is_valid(): # 先保存User模型的基础字段 user = profile.save() # 单独处理头像字段,存入关联的Profile表 if 'avatar' in request.FILES: user.profile.avatar = request.FILES['avatar'] user.profile.save() return redirect("Profile") profile = UserForm(instance=request.user) return render(request, "book/Profile.html", context={"user": request.user, "profile": profile})
2. 补充媒体路由配置(开发环境必需)
在项目的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,提问作者Felix Braun
相关产品推荐
相关产品推荐

