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

Django传递ForeignKey到页面关联数据时报project_id缺失错误如何解决?

Django多模型关联数据新增报错解决方案

错误根因

  • 前端模板url标签语法错误,参数未正确传递到路由
  • 视图层表单instance参数传值错误,Fundamentals模型表单错误传入了Project模型实例
  • 路由参数未指定类型,且缺少规范的结尾斜杠,易触发Django自动重定向导致参数丢失
  • 重定向目标配置错误,redirect方法不能直接传入模板文件名

分步修改方案

1. 修复前端跳转链接

将原跳转链接修改为正确的url标签语法,参数放在路由名称外侧:

<a class="dropdown-item" href="{% url 'add_fundamentals' project.id %}">Critical Fundamentals</a>

2. 优化路由配置

给project_id指定整数类型约束,添加结尾斜杠符合Django路由规范:

path('fundamentals/<int:project_id>/', view=AddFundamentals, name="add_fundamentals"),

3. 修正视图逻辑

修改表单初始化与保存逻辑,手动关联Fundamentals和对应Project实例:

@login_required
def AddFundamentals(request, project_id):
    project = Project.objects.get(pk=project_id)
    if request.method == 'POST':
        form = AddFundamentalsForm(request.POST)
        if form.is_valid():
            # 暂不提交到数据库,先手动绑定关联项目
            fundamentals_obj = form.save(commit=False)
            fundamentals_obj.project_name = project
            fundamentals_obj.save()
            # 替换为你后台仪表盘对应的路由name,不可直接写模板名
            return redirect('dashboard')
    else:
        # GET请求时给表单设置项目初始值,避免用户手动选择
        form = AddFundamentalsForm(initial={'project_name': project})
    return render(request, 'pages/critical_fundementals.html', {'project': project, "form": form})

4. 可选优化:表单隐藏关联字段

如果不需要用户手动选择关联项目,可在表单中隐藏外键字段,避免误操作:

class AddFundamentalsForm(forms.ModelForm):
    class Meta:
        model = Fundamentals
        fields = '__all__'
        widgets = {
            'project_name': forms.HiddenInput()
        }

修改后模板中可直接通过{{ project.project_name }}显示当前项目名称,提交的表单数据会自动关联到对应项目。

内容的提问来源于stack exchange,提问作者JacksWastedLife

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:36:04