Администратор Django - как получить все зарегистрированные модели в templatetag? - PullRequest
9 голосов
/ 22 марта 2012

Я пишу пользовательский админский материал и мне нужно получить все зарегистрированные модели в Admin.Это возможно?Мне нужно сделать несколько пользовательских просмотров на странице индекса администратора.

1 Ответ

15 голосов
/ 22 марта 2012

Вы можете получить доступ к admin.site._registry dict 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.

...