Django FileField无关联文件且图片无法上传问题求助
搞定Django自定义User模型FileField上传为空的问题
嘿,我帮你定位到问题啦!你的表单能正常保存用户名、邮箱这些字段,但profile_picture始终是空的,核心问题出在视图函数初始化表单时,没有传入request.FILES。Django处理文件上传必须同时传递POST数据和FILES数据,不然FileField根本拿不到你上传的文件。
怎么改?
直接修改views.py里的signup函数,把表单初始化的代码调整一下:
form = userRegistrationForm(request.POST or None, request.FILES or None)
或者更规范的区分GET/POST请求的写法:
def signup(request): if request.method == 'POST': # POST请求时同时传入POST和FILES数据 form = userRegistrationForm(request.POST, request.FILES) if form.is_valid() : user = form.save(commit = False) username = form.cleaned_data.get('username') email = form.cleaned_data.get('email') password = form.cleaned_data.get('password') user.set_password(password) user.save() # 修正认证逻辑:用明文密码而非哈希后的密码 new_user = authenticate(email=email, password=password) if new_user: login(request, new_user) return redirect('/') else: # GET请求只初始化空表单 form = userRegistrationForm() return render(request,"registrationsForm.html",{"form": form})
顺便修正一个小bug
你原来的authenticate调用里用了user.password,这是数据库里存储的哈希后的密码,应该用明文的password变量,不然会导致用户注册后无法正常登录,上面的代码已经帮你修正了这个问题。
额外确认(可选,你之前能上传大概率没问题)
既然你说之前可以正常上传,这部分可能没问题,但还是提一下避免后续踩坑:
- 确保
settings.py里配置了媒体文件路径:MEDIA_ROOT = os.path.join(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)
把这些改完,你的头像上传应该就能正常工作啦!
内容的提问来源于stack exchange,提问作者Yunus
相关产品推荐
相关产品推荐

