Django点击删除按钮报delete()缺少必填位置参数id错误如何解决
问题原因
你遇到的报错是因为三处配置不匹配:路由没有接收id参数、视图删除方法调用错误、前端删除链接没有传递对应记录的id。
修改步骤
1. 调整urls.py路由配置
原来的delete路由没有定义id参数,无法传递给视图函数,修改为:
urlpatterns = [ path('', views.login_user, name='login'), path('home/', views.home, name='home'), path('allstaff/', views.allstaff, name='allstaff'), #path('delete_order/<str:pk>/', views.deleteOrder, name="delete_order"), # 新增id参数捕获,类型设为int path('delete/<int:id>/', views.delete, name='delete'), path('logout/', views.logout_view, name='logout'), path('register/', views.register_view, name='register'), path('edit-register/', views.edit_register_view, name='edit_register'), ]
2. 修正views.py中的删除逻辑
Django模型实例的delete()方法不需要传入id参数,调用后会直接删除当前实例对象,同时如果用a标签跳转是GET请求,你当前的逻辑只处理POST请求会无法触发删除,可调整为:
def delete(request, id): user = get_object_or_404(User, id=id) # 若不需要二次确认,直接删除后跳转 user.delete() return HttpResponseRedirect("/home")
注:生产环境建议使用POST请求做删除操作,避免爬虫或预加载机制误删数据,可保留POST判断,把前端删除按钮改成表单提交即可。
3. 修改模板中的删除链接
给每个删除按钮拼接对应用户的id参数,使用Django模板的url反向解析更规范:
找到allstaff.html里的删除按钮代码,修改为:
<a class="btn btn-sm btn-danger" href="{% url 'delete' user.id %}">Delete</a>
修改完成后点击删除按钮就会传递对应用户的id到后端,完成删除操作。
内容的提问来源于stack exchange,提问作者Rainysky
相关产品推荐
相关产品推荐

