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

Posted

技术标签:

【中文标题】在 django admin 中有条件地取消注册或注册模型【英文标题】:unregister or register models conditionally in django admin 【发布时间】:2015-04-16 18:55:59 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

并不是每个人都有超级用户访问权限。我实际上想从超级用户帐户中删除/隐藏许多无用的模型。【参考方案2】:

可以在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 访问。

【讨论】:

以上是关于在 django admin 中有条件地取消注册或注册模型的主要内容,如果未能解决你的问题,请参考以下文章

已在 /admin/ 处注册 Django 1.2 错误

在一定条件下取消选中多选框的选中项

Django -- 条件登录重定向

Django Admin后台管理

如何在 ReactJS 中有条件地加载组件

在 Django 中“有条件地”提供静态文件