Hel*_*nar 75 django django-admin
在注册模型出现的管理站点的根页面上,我想隐藏几个注册到Django管理员的模型.
如果我直接取消注册,我无法添加新记录,因为添加新符号"+"消失.
如何才能做到这一点 ?
小智 115
基于x0nix的答案,我做了一些实验.似乎返回一个空的dict从get_model_perms
index.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)
小智 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)