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

Django使用CreateView保存时报NOT NULL约束失败无法自动关联父项目外键

问题原因

  1. 外键字段名赋值错误:IDTasks模型中关联ParentProject的外键字段命名为parent,但你在form_valid方法中错误赋值给了不存在的ParentProject属性,导致外键字段为空触发非空约束报错。
  2. 跳转参数不匹配:parent_detail路由定义接收的参数是parent_id,但你在get_success_url中传递的键是pk,会导致跳转时报参数缺失错误。

修正后的视图代码

class add_idtask_view(SuccessMessageMixin, CreateView):
    model = IDTasks
    template_name = 'otis/id_report_form.html'
    form_class = idTaskForm
    success_message = "Report added"

    def form_valid(self, form):
        idtaskform = form.save(commit=False)
        idtaskform.user = self.request.user
        # 正确获取parent_id,赋值给对应的外键字段parent
        parent_id = self.kwargs.get('parent_id')
        idtaskform.parent = get_object_or_404(ParentProject, id=parent_id)
        idtaskform.save()
        return super(add_idtask_view, self).form_valid(form)
  
    def get_success_url(self):
        # 传递正确的参数名parent_id
        return reverse_lazy('otis:parent_detail', kwargs={'parent_id': self.kwargs.get('parent_id')})

补充说明

你之前写的idtaskform = form.save(commit=False)赋值后没有调用save(),反而直接修改form.instance,属于冗余代码,上面的修正里统一用idtaskform处理,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:09:03