You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 2.0获取已注册模型列表(替代过时API方法咨询)

获取Django 2.0中与Admin首页一致的已注册模型列表

嘿,我之前升级到Django 2.0时也碰到过这个问题,那些旧API确实都被弃用了,但咱们可以直接借助Django Admin本身的机制,拿到和首页完全匹配的已注册模型列表,下面是具体解决方案:

核心思路:利用AdminSite的注册记录

Django Admin会把所有注册的模型存在AdminSite实例的_registry属性里,默认的Admin站点就是django.contrib.admin.site,直接用它就能获取所有已注册模型及其对应的ModelAdmin实例。

步骤1:获取所有已注册模型

先导入默认的Admin站点,然后访问它的_registry属性:

from django.contrib.admin import site

# 已注册模型字典:键是模型类,值是对应的ModelAdmin实例
registered_models = site._registry

步骤2:按App分组(和Admin首页结构一致)

如果需要和Admin首页一样按App分组展示,结合Django的apps模块获取App的详细信息,整理成结构化数据:

from django.apps import apps

# 初始化分组字典
grouped_models = {}

for model, model_admin in registered_models.items():
    # 获取模型所属的App配置
    app_config = apps.get_app_config(model._meta.app_label)
    # 用App的友好名称作为分组键
    app_verbose_name = app_config.verbose_name
    
    # 将模型添加到对应App分组
    if app_verbose_name not in grouped_models:
        grouped_models[app_verbose_name] = []
    
    grouped_models[app_verbose_name].append({
        "model_class": model,
        "model_admin": model_admin,
        "model_verbose_name": model._meta.verbose_name,
        "model_verbose_name_plural": model._meta.verbose_name_plural,
        # 如需Admin权限信息,可从model_admin获取(传入request可做真实权限校验)
        "has_add_permission": model_admin.has_add_permission(None),
        "has_change_permission": model_admin.has_change_permission(None)
    })

过时API的替代说明

  • 替代from django.db.models import get_models:现在推荐用apps.get_models(),但它会返回所有已安装App的模型(包括未在Admin注册的)。如果只需要Admin已注册的模型,site._registry是更精准的选择。
  • 替代from django.contrib.admin.validation import validate:Django 2.0之后,Admin在注册模型时会自动执行验证逻辑,无需手动调用该函数。若需手动验证ModelAdmin配置,可调用model_admin.check()方法,它会返回所有验证错误。

自定义AdminSite的适配

如果你用了自定义的AdminSite(而非默认的admin.site),只需把代码中的site换成你自己定义的AdminSite实例即可,比如:

# 假设你自定义了MyAdminSite
from myapp.admin import MyAdminSite

custom_site = MyAdminSite(name='custom_admin')
registered_models = custom_site._registry

这样整理出的grouped_models结构就和Admin首页完全一致,按App分组展示已注册模型,还能获取Admin的配置和权限信息。

内容的提问来源于stack exchange,提问作者Russell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:58:29