Django删除数据库对象时出现NoReverseMatch错误求助
解决Django删除功能的NoReverseMatch错误
嘿,我一眼就揪出问题所在了——你的模板和视图传递的变量名不匹配,导致id根本没传过去,才触发了这个反向解析错误。咱们一步步来修复:
1. 修正模板里的变量名
你的show.html里写的是{% url 'delete_player' quarterback.id %},但根据你描述的,show视图把球员数据传给模板时用的变量名是QB,模板里根本找不到quarterback这个变量,自然传的是空id,直接触发了URL匹配失败。
把模板代码改成这样:
<tr> <td>{{ QB }} <a href="{% url 'delete_player' QB.id %}">Delete</a></td> </tr>
2. 修复views.py里的隐藏坑
你当前的delete_player函数里用了Quarterback.get(id=id),这会触发另一个错误——Django模型的查询方法必须通过objects管理器调用,正确写法应该是:
def delete_player(request, id): quarterback = Quarterback.objects.get(id=id) quarterback.delete() return redirect('show')
要是不改这个,等你解决了URL问题,又会遇到AttributeError: type object 'Quarterback' has no attribute 'get'的新错误。
3. 为什么错误指向show函数?
因为模板是在show视图的渲染过程中生成的,当模板尝试解析{% url %}标签时,发现找不到有效的id参数,这个错误就会在show视图的执行流程里抛出来,所以错误提示指向show函数,其实根源是模板变量不匹配。
这样调整后,模板就能正确拿到球员的id,URL反向解析也能正常工作,删除功能就可以顺利跑通啦!
内容的提问来源于stack exchange,提问作者user14593966
相关产品推荐
相关产品推荐

