在 django admin 中有条件地注销或注册模型

unregister or register models conditionally in django admin

是否可以在 django admin 中有条件地注册或取消注册模型? 我希望某些模型出现在 django admin 中,仅当请求满足某些条件时。在我的特定情况下,我只需要检查登录用户是否属于特定组,如果用户(即使是超级用户)不在组中则不显示模型。我不能在这里使用权限,因为不能排除超级用户使用权限。 或者,有没有办法撤销模型的超级用户权限。

我已经在本地尝试了几种方法,包括覆盖 AdminSite,但考虑到所有与管理相关的代码都是在应用程序初始化时加载的事实,最简单的方法是依赖权限(而不是给每个人超级用户访问权限)。

可以在 ModelAdmin 中动态管理模型的权限。 覆盖方法 has_add-permissionhas_change_permissionhas_delete_permission.

class MyModelAdmin(admin.ModelAdmin):
    def has_add_permission(self,request):
        # if request satisfies conditions:
        #   return True
        #else:
        #   return False

其他两种方法同理。这也适用于 superusers。 如果您撤销所有三个权限,MyModel 将不会在管理站点上列出。

如果您只需要从管理站点隐藏 model 条目,只需覆盖 get_model_perms 方法。您不必覆盖权限方法。

def get_model_perms(self, request):
    return {}

但是,此方法不会撤消 model 的权限。即使该模型未在管理站点上列出,也可以通过输入 url.

进行访问