Django报FieldError:Message模型指定未知字段( message)如何解决?
问题根因
报错提示中的未知字段( message)前面带有空格,对应你forms.py里Meta.fields列表的第三个值' message',字段名前多了一个多余的空格。Django会将字符串整体作为字段名匹配模型定义,带空格的字段名和模型里的message字段无法对应,因此抛出未知字段错误。
修复方案
- 首先修正
forms.py中的字段定义,去掉message前的多余空格:
class emailForm(forms.ModelForm): class Meta: model = Message fields = ['receiver', 'subject', 'message'] # 移除message前的空格即可 labels = {'receiver':'receiver', 'subject':'subject', 'message' : ' message'} widgets = { 'receiver': forms.TextInput(attrs={"class":'form-control'}), 'subject': forms.TextInput(attrs={"class":'form-control'}), 'message': forms.Textarea(attrs={"class":'form-control'}), }
- 可选优化:你当前
views.py存在逻辑问题,可以同步修正避免后续报错:- 原有判断
if request.method == 'POST' or 'GET'逻辑恒为真,GET请求不需要做表单校验和数据存储,应该改为仅判断POST请求 - 无需手动从
request.POST取值构造Message对象,直接调用ModelForm的save()方法即可完成数据存储,减少出错概率 - 模板上下文的key命名为
message容易和字段重名,建议修改为form更清晰
- 原有判断
优化后参考代码:
def home(request): if request.method == 'POST': form = emailForm(request.POST) if form.is_valid(): form.save() return redirect('inbox') else: form = emailForm() return render(request, "home.html", {'form': form})
内容的提问来源于stack exchange,提问作者ramnath
相关产品推荐
相关产品推荐

