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

Django Views.py中引用表单提交后模型id发邮件报KeyError如何解决

问题解决方法

错误原因

KeyError: 'id'报错是因为模型的主键id是数据存入数据库时自动生成的系统字段,不会包含在用户提交的表单清洗数据form.cleaned_data中,直接读取不存在的键就会触发该错误。

正确实现方式

Django的ModelForm调用save()方法时会返回刚创建完成的模型实例,你只需要接住这个返回值,就可以直接获取自动生成的id字段。

修改后的完整代码如下:

def jobCard(request ):
    form = jobCardForm()

    if request.method == 'POST':
        form = jobCardForm(request.POST)
        if form.is_valid():
            # 接收save方法返回的刚保存的模型实例
            job_card_instance = form.save()

            send_mail(
                f'ZTS JOB CARD {form.cleaned_data["jobNumber"]}',
                f'A new job card has been loaded for {form.cleaned_data["customerName"]} with a Total Cost of {form.cleaned_data["totalCostOfJob"]} (http://localhost:8000/zipherJobCards/viewJobCard/{job_card_instance.id})',
                'it.zipher@gmail.com',
                ['it@zipher.co.za'],
                fail_silently=False,
            )

            return redirect('home')
        else:
            print(form.errors)

    content = {'form':form}
    return render(request, 'main/jobCard.html', content)

可选优化建议

  • 不要硬编码URL路径,可使用Django内置的reverse函数配合request.build_absolute_uri动态生成完整访问链接,后续路由规则调整时不需要手动修改业务代码,示例如下:
from django.urls import reverse

# 生成链接部分替换为如下代码
job_card_url = request.build_absolute_uri(reverse('viewJobCard', args=[job_card_instance.id]))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:02