Django中FileField无法将文件传递至表单请求的问题
Django 文件上传表单验证失败的解决方法
核心问题及修复步骤
1. 表单缺少文件上传必需的编码类型
HTML表单上传文件时,必须指定enctype="multipart/form-data"属性,否则浏览器不会将文件数据发送到后端。修改模板中的form标签:
<form action="" method="post" id="search_face_form" style="width: 100%;" enctype="multipart/form-data">
2. 视图中请求判断逻辑错误
request.POST不会包含文件字段,应该通过请求方法判断是否为POST请求,而非检查'photo' in request.POST。修改视图函数:
def upload(request): context = {} if request.method == 'POST': form = Form(request.POST, request.FILES) if form.is_valid(): handle_uploaded_file(request.FILES["photo"]) else: print(form.errors) else: form = Form() context['form'] = form return render(request, 'app/upload.html', context)
3. 模板与表单字段/变量不匹配
模板中使用{{ search_form.face }},但视图传递的表单变量是form,且表单类字段名为photo,三者不匹配。需统一命名:
- 要么修改视图变量:
context['search_form'] = form - 要么修改模板变量为
{{ form.photo }} - 若模板坚持用
face,则表单类字段需改为face = forms.FileField(...)
验证修复效果
修改完成后重新提交表单,浏览器会正确携带文件数据,form.is_valid()可通过验证,文件将被正常保存。
内容的提问来源于stack exchange,提问作者Miguel Hernandez
相关产品推荐
相关产品推荐

