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

Zah*_*hid 3 python django django-models django-admin django-admin-tools

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

Zah*_*hid 5

可以在中动态管理模型的权限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
Run Code Online (Sandbox Code Playgroud)

其他两种方法也一样。这也适用于superuser。如果您撤消所有三个权限,MyModel则不会在管理站点上列出。

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

def get_model_perms(self, request):
    return {}
Run Code Online (Sandbox Code Playgroud)

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