如何实现Django Admin仅在DEBUG模式下显示全部模型,非DEBUG仅展示指定单个模型
实现方案
执行位置选择
逻辑直接放在项目根目录的urls.py文件中即可,Django加载路由的时机晚于所有应用admin.py的模型注册逻辑,完全满足你要等所有注册完成后再执行的要求。
具体实现代码
# 项目根urls.py from django.conf import settings from django.contrib import admin from your_app.models import Model1 # 替换为你要保留的模型实际导入路径 # 原有路由配置保持不变 urlpatterns = [ path("admin/", admin.site.urls), # 其余原有路由 ] # 新增DEBUG判断逻辑 if not settings.DEBUG: # 遍历所有已注册的模型 for model in list(admin.site._registry.keys()): # 跳过指定要保留的Model1 if model._meta.label == Model1._meta.label: continue # 卸载其余所有模型 admin.site.unregister(model)
你之前设想的直接清空
_registry再重新注册的方法也可以运行,但_registry是AdminSite的私有属性,不同Django版本可能调整内部实现,优先推荐用官方公开的unregister方法,兼容性更好。
验证方式
分别把settings.py中的DEBUG改为True和False,登录admin后台查看左侧菜单即可验证效果。
内容的提问来源于stack exchange,提问作者Miszo97
相关产品推荐
相关产品推荐

