Django ModelForm POST验证失败 视图返回None报错如何解决
你遇到的报错和created_at字段无关,问题由3个代码错误共同导致,修复方案如下:
1. 补全视图的返回逻辑
你当前的视图代码只处理了两种场景:GET请求、POST请求且表单验证通过。当POST请求表单验证不通过时,没有任何返回值,所以触发The view ... didn't return an HttpResponse object. It returned None instead.报错。
修复后的视图代码:
def medical_list_add(request): if request.method == "POST": # 同时修复参数传递问题,传用户ID而不是用户对象 form = MedicalListForm(request.POST, request.FILES, user_id=request.user.id) if form.is_valid(): form.save() return redirect('medical_list') else: form = MedicalListForm(user_id=request.user.id) # 把render放到判断外面,GET请求、POST验证失败都返回表单页面,同时携带错误信息 return render(request, 'medical_list_add.html', {'form': form})
2. 修复模板表单的文件上传属性
上传文件的表单必须添加enctype="multipart/form-data"属性,否则后台无法正确接收上传的文件,直接导致upload字段验证失败。
修复后的表单标签:
<form method="POST" enctype="multipart/form-data"> {% csrf_token %} <div class="form-group"> {{ form.as_p }} <button type="submit" class="btn btn-primary">Guardar</button> <a class="nav-item linking" href = "{% url 'medical_list' %}">Cancel</a> </div> </form>
3. 修正表单初始化的参数匹配逻辑
你的MedicalListForm的__init__方法中,用user_id过滤Worker的查询集,你之前传的是request.user(User对象),如果Worker模型的user字段是关联到User模型的外键,要么传request.user.id给user_id参数,要么把过滤逻辑改成Worker.objects.filter(user=user_id),两边类型要匹配。
如果修复后仍验证失败,可以在视图中if form.is_valid()之前打印form.errors查看具体的字段错误信息,快速定位剩余问题。
内容的提问来源于stack exchange,提问作者user11319165
相关产品推荐
相关产品推荐

