在 django admin 中,我有 4 个用户和一个超级用户。我的用户具有员工身份,访问受限,无法删除/查看/编辑用户,但管理员对所有其他用户和模型拥有权限。我确实希望超级用户能够访问用户数据并编辑/修改/删除它们,但我不希望超级用户能够删除自己。目前超级用户可以删除自己。有没有办法在 django 中自己禁用超级用户删除?任何帮助将不胜感激。
谢谢
在 django admin 中,我有 4 个用户和一个超级用户。我的用户具有员工身份,访问受限,无法删除/查看/编辑用户,但管理员对所有其他用户和模型拥有权限。我确实希望超级用户能够访问用户数据并编辑/修改/删除它们,但我不希望超级用户能够删除自己。目前超级用户可以删除自己。有没有办法在 django 中自己禁用超级用户删除?任何帮助将不胜感激。
谢谢
不要使用 has_delete_permission() 覆盖,因为当您从更改列表执行删除操作时,不会在每个对象上调用它。
使用信号来做到这一点。将此添加到任何 models.py
from django.db.models.signals import pre_delete
from django.dispatch.dispatcher import receiver
from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied
@receiver(pre_delete, sender=User)
def delete_user(sender, instance, **kwargs):
if instance.is_superuser:
raise PermissionDenied
这种方法的唯一缺点是没有人能够删除任何超级用户。您必须先将用户属性“is_superuser”设置为 False,然后才能将其删除。
您可以尝试覆盖UserAdmin
,使其不允许删除,如此处所述:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class MyUserAdmin(UserAdmin):
def has_delete_permission(self, request, obj=None):
if obj is None:
return True
else:
return not obj.is_superuser
admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)