Django提交房间评论时触发NOT NULL约束错误的原因排查
问题根因
非空约束报错是前后端表单字段名不匹配导致的:
- 你的
Message模型中body字段是必填非空字段(未设置null=True),数据库层禁止写入空值 - 前端评论输入框的
name属性写的是comment - 后端视图创建消息时,从POST请求里取的参数字段名是
body
字段名不匹配时,request.POST.get('body')会返回None,给必填的body字段传空值就会直接触发非空约束错误。
修复方法
两种修改方式二选一即可,核心是保证前后端字段名一致:
- 修改前端模板,把输入框的name属性改成和后端一致的
body
<input type="text" name="body" placeholder="Write your message here..."/>
- 修改后端视图,把取POST参数的键名改成和前端一致的
comment
if request.method == 'POST': message = Message.objects.create( user=request.user, room=room, body=request.POST.get('comment') ) return redirect('room', pk=room.id)
补充建议:创建评论前最好加一层非空判断,比如校验取到的评论内容去除首尾空格后不为空再执行入库操作,避免用户提交空内容触发同类错误。
内容的提问来源于stack exchange,提问作者Shehu_na
相关产品推荐
相关产品推荐

