Django管理员,隐藏模型

Hel*_*nar 75 django django-admin

在注册模型出现的管理站点的根页面上,我想隐藏几个注册到Django管理员的模型.

如果我直接取消注册,我无法添加新记录,因为添加新符号"+"消失.

如何才能做到这一点 ?

小智 115

基于x0nix的答案,我做了一些实验.似乎返回一个空的dict从get_model_permsindex.html中排除模型,同时仍然允许你直接编辑实例.

class MyModelAdmin(admin.ModelAdmin):
    def get_model_perms(self, request):
        """
        Return empty perms dict thus hiding the model from admin index.
        """
        return {}

admin.site.register(MyModel, MyModelAdmin)
Run Code Online (Sandbox Code Playgroud)

  • 一个更短的方法:`get_model_perms = lambda self,req:{}` (6认同)
  • 请小心此解决方案 - 即使链接消失,用户也可以像这样跳转到对象本身:/admin/main/comment/2333/change/ (3认同)
  • 如果我想隐藏某个userAdmin的模型怎么办? (2认同)

小智 22

遇到了同样的问题,这就是我提出的问题.

与以前的解决方案一样 - 将index.html从django复制到您的/admin/index.html并像这样修改它:

{% for model in app.models %}
    {% if not model.perms.list_hide %}
    <tr>
    ...
    </tr>
    {% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

并创建ModelAdmin子类:

class HiddenModelAdmin(admin.ModelAdmin):
    def get_model_perms(self, *args, **kwargs):
        perms = admin.ModelAdmin.get_model_perms(self, *args, **kwargs)
        perms['list_hide'] = True
        return perms
Run Code Online (Sandbox Code Playgroud)

现在,使用HiddenModelAdmin子类注册的任何模型都不会显示在管理列表中,但可以通过"加号"符号详细说明:

class MyModelAdmin(HiddenModelAdmin):
    ...

admin.site.register(MyModel, MyModelAdmin)
Run Code Online (Sandbox Code Playgroud)


xyr*_*res 20

从Django 1.8开始,ModelAdmin有一个新的方法has_module_permission(),负责在管理索引中显示模型.

要从管理索引隐藏模型,只需在您的ModelAdmin类中创建此方法并返回False.例:

class MyModelAdmin(admin.ModelAdmin):
    ...
    def has_module_permission(self, request):
        return False
Run Code Online (Sandbox Code Playgroud)

  • 使用Django 2.1,它可以完美运行! (2认同)