在 django admin 中有条件地注销或注册模型
unregister or register models conditionally in django admin
是否可以在 django admin 中有条件地注册或取消注册模型?
我希望某些模型出现在 django admin 中,仅当请求满足某些条件时。在我的特定情况下,我只需要检查登录用户是否属于特定组,如果用户(即使是超级用户)不在组中则不显示模型。我不能在这里使用权限,因为不能排除超级用户使用权限。
或者,有没有办法撤销模型的超级用户权限。
我已经在本地尝试了几种方法,包括覆盖 AdminSite,但考虑到所有与管理相关的代码都是在应用程序初始化时加载的事实,最简单的方法是依赖权限(而不是给每个人超级用户访问权限)。
可以在 ModelAdmin
中动态管理模型的权限。
覆盖方法 has_add-permission
、has_change_permission
和 has_delete_permission
.
class MyModelAdmin(admin.ModelAdmin):
def has_add_permission(self,request):
# if request satisfies conditions:
# return True
#else:
# return False
其他两种方法同理。这也适用于 superuser
s。
如果您撤销所有三个权限,MyModel
将不会在管理站点上列出。
如果您只需要从管理站点隐藏 model
条目,只需覆盖
get_model_perms
方法。您不必覆盖权限方法。
def get_model_perms(self, request):
return {}
但是,此方法不会撤消 model
的权限。即使该模型未在管理站点上列出,也可以通过输入 url.
进行访问
是否可以在 django admin 中有条件地注册或取消注册模型? 我希望某些模型出现在 django admin 中,仅当请求满足某些条件时。在我的特定情况下,我只需要检查登录用户是否属于特定组,如果用户(即使是超级用户)不在组中则不显示模型。我不能在这里使用权限,因为不能排除超级用户使用权限。 或者,有没有办法撤销模型的超级用户权限。
我已经在本地尝试了几种方法,包括覆盖 AdminSite,但考虑到所有与管理相关的代码都是在应用程序初始化时加载的事实,最简单的方法是依赖权限(而不是给每个人超级用户访问权限)。
可以在 ModelAdmin
中动态管理模型的权限。
覆盖方法 has_add-permission
、has_change_permission
和 has_delete_permission
.
class MyModelAdmin(admin.ModelAdmin):
def has_add_permission(self,request):
# if request satisfies conditions:
# return True
#else:
# return False
其他两种方法同理。这也适用于 superuser
s。
如果您撤销所有三个权限,MyModel
将不会在管理站点上列出。
如果您只需要从管理站点隐藏 model
条目,只需覆盖
get_model_perms
方法。您不必覆盖权限方法。
def get_model_perms(self, request):
return {}
但是,此方法不会撤消 model
的权限。即使该模型未在管理站点上列出,也可以通过输入 url.