Django通过Web表单上传文件提示视频字段必填但已上传如何解决
问题根因
你在视图中实例化POST请求的表单时,仅传入了request.POST参数,没有传入文件数据载体request.FILES。Django中所有通过表单上传的文件都会被存储在request.FILES对象中,处理包含文件字段的表单时,必须同时传入request.POST和request.FILES两个参数,表单才能正确读取到上传的文件内容,因此即使你前端传了视频,后端表单也识别不到文件,就会抛出必填项校验错误。
修复方案
仅需要修改视图中表单实例化的代码即可:
将原有代码
form = CreateCourseForm(request.POST)
修改为
form = CreateCourseForm(request.POST, request.FILES)
修改完成后的完整视图代码如下:
def create_course(request): form = CreateCourseForm() if request.method == 'POST': form = CreateCourseForm(request.POST, request.FILES) if form.is_valid(): new_course = form.save(commit=False) new_course.instructor = request.user new_course.save() return redirect('home') return render(request, 'courses/create.html',{'form':form})
补充注意事项
- 你已经在前端form标签添加了
enctype="multipart/form-data"属性,该项配置正确无需修改 - 如果你后续需要将视频字段设置为非必填项,可在Course模型的video字段中添加
blank=True参数即可
内容的提问来源于stack exchange,提问作者Samyak Jain
相关产品推荐
相关产品推荐

