在Django中更改is_superuser字段
我有一个表格,里面有一些叫做“审核者”的用户,这些用户都是普通的Django auth_users
,他们可能是超级用户,也可能不是。这个信息是通过 is_superuser
这个字段来表示的(来自 django.contrib.auth )
我写了一个函数,用来改变每个通过复选框选中的审核者的超级用户状态:
def change_su(request):
if request.method == 'POST':
ids = request.POST.getlist('selected')
for id in ids:
try:
rev = Reviewer.objects.get(pk=id)
if rev.is_superuser == 1:
rev.is_superuser = 0
messages.info(request, _('User with id %(id)s is no superuser anymore') % {'id': id})
else:
rev.is_superuser = 1
messages.info(request, _('User with id %(id)s is now superuser') % {'id': id})
except Exception as e:
logging.getLogger(__name__).exception(e)
messages.error(request, _('Failed to change superuser status for reviewer with id %(id)s') % {'id': id})
return HttpResponseRedirect(reverse('admin_index'))
当我选择一个用户并点击调用这个函数的按钮时,它会显示“用户ID为..的用户不再是超级用户”或者“用户ID为..现在是超级用户”,所以这个函数能识别 is_superuser
字段,并且可以读取里面的内容。不过,超级用户的状态却没有改变。
这是不是一个特殊的字段,我没有权限去更改呢?
编辑:这是修正后的代码,现在可以正常工作了。谢谢你,Daniel!
def change_su(request):
if request.method == 'POST':
ids = request.POST.getlist('selected')
for id in ids:
try:
rev = Reviewer.objects.get(pk=id)
if rev.is_superuser == 1:
rev.is_superuser = 0
rev.save()
messages.info(request, _('User with id %(id)s is no superuser anymore') % {'id': id})
else:
rev.is_superuser = 1
rev.save()
messages.info(request, _('User with id %(id)s is now superuser') % {'id': id})
except Exception as e:
logging.getLogger(__name__).exception(e)
messages.error(request, _('Failed to change superuser status for reviewer with id %(id)s') % {'id': id})
return HttpResponseRedirect(reverse('admin_index'))
1 个回答
2
你似乎没有在任何地方调用 rev.save()
这个方法,所以你所做的更改不会被保存到数据库里。