Django使用DetailView实现点击HTML按钮激活用户的问题求助
问题原因分析
- 最初
TypeError: 'bool' object is not callable报错的原因:Django内置User模型的is_active是布尔类型属性,不是可执行方法,你加括号user.is_active()相当于尝试把布尔值作为函数调用,自然触发类型错误。 - 修改后用户状态不生效的原因:你调整后的代码仅读取了
user.is_active的属性值,既没有给属性赋值为True,也没有调用save()方法将修改同步到数据库,修改自然不会生效。
你的模板、路由、模型部分的逻辑没有问题,仅需要修改视图的激活逻辑即可。
修复方案
替换你的accept视图代码为以下内容即可:
from .models import Model from django.contrib.auth.models import User from django.shortcuts import get_object_or_404, redirect class UserInspectView(DetailView): model = Model template_name = 'user-inspect.html' def accept(request, pk): # 用get_object_or_404替代原生get,避免用户不存在时直接触发500错误 user = get_object_or_404(User, id=pk) # 直接给布尔属性赋值,不需要加括号 user.is_active = True # 保存修改到数据库 user.save() return redirect('home')
内容的提问来源于stack exchange,提问作者AnonymousUser
相关产品推荐
相关产品推荐

