Django admin - 如何获取模板标签中的所有注册模型?

Posted

技术标签:

【中文标题】Django admin - 如何获取模板标签中的所有注册模型?【英文标题】:Django admin - how to get all registered models in templatetag? 【发布时间】:2012-04-06 21:01:27 【问题描述】:

我正在编写自定义管理内容,需要在管理中获取所有已注册的模型。这可能吗?我需要它在管理索引页面上制作一些自定义视图。

【问题讨论】:

【参考方案1】:

你可以访问admin.site._registry dict of Model->ModelAdmin:

>>> ./manage.py shell

In [1]: from urls import * # load admin

In [2]: from django.contrib import admin

In [3]: admin.site._registry
Out[3]: 
django.contrib.auth.models.Group: <django.contrib.auth.admin.GroupAdmin at 0x22629d0>,
 django.contrib.auth.models.User: <django.contrib.auth.admin.UserAdmin at 0x2262a10>,
 django.contrib.sites.models.Site: <django.contrib.sites.admin.SiteAdmin at 0x2262c90>,
 testapp.models.Up: <django.contrib.admin.options.ModelAdmin at 0x2269c10>,
 nashvegas.models.Migration: <nashvegas.admin.MigrationAdmin at 0x2262ad0>

这是管理索引视图的作用:

@never_cache
def index(self, request, extra_context=None):
    """ 
    Displays the main admin index page, which lists all of the installed
    apps that have been registered in this site.
    """
    app_dict = 
    user = request.user
    for model, model_admin in self._registry.items():
        # ...

请注意,带有下划线前缀的变量可能会在 django 的未来版本中发生变化。

【讨论】:

您知道是否有某种方法可以获取用户在管理员中的实际应用程序吗?如果是 dahsboard,它不会返回任何应用程序,但对于其他应用程序,它会返回所有标签或对象。我想在我的管理全局菜单中使用它作为模板标签。 我不明白,你能再开一个问题并提供更多细节吗?【参考方案2】:

你可以这样做:

from django.apps import apps

models = apps.get_models()

for model in models:
   try:
       my_custom_admin_site.register(model)
   except admin.sites.AlreadyRegistered:
       pass

apps.get_models() 将在默认的 Django Admin 站点中提供所有已注册的模型。

【讨论】:

以上是关于Django admin - 如何获取模板标签中的所有注册模型?的主要内容,如果未能解决你的问题,请参考以下文章

Django-admin.py startproject --带有模板标签的模板

如何根据 Django admin 中的另一个选择标签选项更改选择标签选项?

如何获取标签名称作为 Django 模板中选中/选中复选框的值

Django模板如何使用标签和模板过滤器从json dict中获取数据

如何在模板标签中获取当前用户?

Django-Template:在标签块中获取变量!