删除User对象时触发'str' object is not callable错误求助
解决删除User对象时出现的
'str' object is not callable错误 这个报错通常是因为Django无法找到可调用的视图函数,或者代码里存在变量名冲突导致内置功能被意外覆盖。结合你给出的代码,我们来一步步排查和修复:
最可能的问题:URL配置错误
你大概率在urls.py里犯了一个常见错误——直接调用了视图函数(加了括号),而不是仅引用函数本身。比如错误的写法是这样的:
# 错误示例:直接执行视图函数,导致返回的响应对象被当作视图 path('employee/delete/<int:id>/', views.employe_delete(id=id), name='employe_delete')
正确的URL配置应该只传递视图函数的引用(不带括号),让Django在请求到达时再去调用它:
# 正确写法 path('employee/delete/<int:id>/', views.employe_delete, name='employe_delete')
当你给视图函数加括号时,Django会立刻执行该函数并得到一个HttpResponse对象(或字符串),但Django期望的是一个可调用的函数,因此就会抛出'str' object is not callable的错误。
次要优化点:避免用内置函数名当参数
你的视图函数用了id作为参数名,但id是Python的内置函数(用来获取对象内存地址)。虽然这不是当前报错的直接原因,但后续可能引发其他意外问题,建议改成更明确的名称,比如user_id:
def employe_delete(request, user_id=None): user = get_object_or_404(User, id=user_id) # 后续代码保持不变
同时记得同步更新urls.py里的参数名:
path('employee/delete/<int:user_id>/', views.employe_delete, name='employe_delete')
模板与视图逻辑验证
你的模板代码是没问题的:表单用了POST方法、包含{% csrf_token %},提交后能触发视图里的删除逻辑;视图中的user.delete()和重定向逻辑也都正确。只要修复好URL配置,删除操作就能正常执行。
按照上面的步骤修改后,重新测试应该就能解决这个报错了。
内容的提问来源于stack exchange,提问作者Sanjay
相关产品推荐
相关产品推荐

