Django同一页面提交文件与文本表单到两个模型报错如何解决
错误根因
当你提交文本表单时,请求体中没有文件字段,request.FILES 字典里不存在file键,你直接用request.FILES['file']强制读取不存在的键,就触发了MultiValueDictKeyError异常。
修复方案
只需要修改视图的判断逻辑,把直接取键的写法改成用get()方法取值即可,get()方法读取不到对应键时会返回None,不会抛出异常:
# 模型导入建议移到文件顶部,不要写在函数内部 from .models import Gallery_img, Gallery_txt def gallery(request): if request.method== 'POST': # 把原来的request.FILES['file']改成request.FILES.get('file') if request.FILES.get('file'): post = Gallery_img() post.gallery_image = request.FILES['file'] post.save() print('successful image upload') # 可选优化:此处改成重定向到当前页,避免用户刷新页面重复提交 # return redirect('gallery') 给对应url配置name属性即可使用 return render(request, 'gallery.html') if request.POST.get('text'): post= Gallery_txt() post.gallery_text = request.POST.get('text') post.save() print('successful text upload') # 同样建议改成重定向 return render(request, 'gallery.html') else: return render(request, 'gallery.html')
内容的提问来源于stack exchange,提问作者S.hasan
相关产品推荐
相关产品推荐

