You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:54:07