如何防止管理员超级用户导致 "Site matching query does not exist" 错误?

How to prevent admin superusers from causing "Site matching query does not exist" errors?

有很多关于 Django 错误信息的问题 Site matching query does not exist.:

在所有这些情况下,原因被正确识别为 django_site table 中缺少在 settings.py 中指定为 SITE_ID 的行.

好吧,我想防止以后再发生这种情况。现在,我已经授予 select 几个管理员超级用户访问 Django 管理员的权限。如果他们愿意,他们有权销毁所有数据,并且他们对此负责。然而,我本人负责服务器可用性并希望防止任何服务器 500 错误。在目前的情况下,我的员工超级用户可以从 django_site 中删除对象,从而使站点无法访问,我发现这是 unacceptable.

如何防止管理员超级用户呈现整个网站无法访问?

像这样创建自定义管理员 class:

class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
    # Other stuff here
    def has_delete_permission(self, request, obj=None):
        return False

如果您只想防止删除最后一个站点并在数据库中定义了多个站点时允许:

class DeleteNotAllowedModelAdmin(admin.ModelAdmin):
    # Other stuff here
    def has_delete_permission(self, request, obj=None):
        if Site.objects.count() > 1:
            return True
        return False

或者类似这样的东西。

编辑:至于如何注册该自定义 class,请查看 here