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

Django中使用textarea时触发KeyError错误,求解决方案

解决Django表单提交时KeyError 'body'的问题

核心问题分析

你在调用Contact.objects.create时尝试获取data['body']触发KeyError,说明提交的请求数据里不存在body字段,或者你处理表单数据的方式有误。结合你提供的代码信息,以下是具体原因和修复方案:

可能的原因及修复方法

1. 未通过Django表单类正确处理提交数据

如果你的视图里直接从request.POST取数据,而非先通过ContactForm做验证清洗,可能因为表单验证失败(比如字段不符合规则),或直接调用request.POST时未处理字段缺失的情况,导致找不到body键。

正确处理方式:

# views.py
from django.shortcuts import render
from .forms import ContactForm
from .models import Contact

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            cleaned_data = form.cleaned_data
            # 注意模型字段是text,对应表单的body字段
            Contact.objects.create(
                title=cleaned_data['title'],
                phone_mail=cleaned_data['phone_mail'],
                text=cleaned_data['body']
            )
            return render(request, 'success.html')  # 提交成功后的页面
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

2. 前端表单实际未提交body字段

虽然你设置了textarea的name为body,但可能存在以下情况:

  • 表单未包裹在<form>标签内,或表单的method未设为POST
  • textarea被隐藏/禁用,导致提交时未携带该字段
  • 前端JS修改了字段name或阻止了字段提交

检查方法:
打开浏览器开发者工具(F12)→ 网络标签,提交表单后查看POST请求的Form Data,确认是否包含body字段及其值。

3. 表单字段允许为空但未做容错处理

如果ContactForm里的body字段设置了required=False,提交时该字段为空的话,cleaned_data里可能不会生成body键(取决于Django版本)。

修复方式:
用get方法做容错处理:

text=cleaned_data.get('body', '')  # 为空时返回空字符串

4. 模型与表单字段对应错误

你的Contact模型字段是text,表单字段是body,创建实例时要确保是将表单的body值赋值给模型的text字段,避免字段名混淆。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:55:29