django: проверьте на modeladmin для данной модели

Как каждый проверяет, чтобы видеть, существует ли modeladmin для данной модели?

modeladmins создаются путем регистрации модели с объектом admin.site. как можно проверить объект сайта видеть, какие модели были зарегистрированы, и с который admin_class?

13
задан Cody Django 2 June 2010 в 08:12
поделиться

1 ответ

Интересный вопрос, который заставил меня немного покопаться.

После регистрации классов администратора они хранятся в атрибуте объекта site, который называется - что неудивительно - _registry. Это словарь классов моделей для классов modeladmin - обратите внимание, что и ключи, и значения - это классы, а не имена.

Так что если у вас есть admin.py, например, такой:

from django.contrib import admin
from myapp.models import MyModel

class MyModelAdmin(admin.ModelAdmin):
    list_display = ('field1', 'field2')

admin.site.register(MyModel, MyModelAdmin)

то как только он будет импортирован - обычно строкой admin.autodiscover() в urls.py - admin.site._registry будет содержать что-то вроде этого:

{<class 'myapp.models.MyModel'>: 
    <django.contrib.admin.options.ModelAdmin object at 0x10210ba50>}

и вы получите объект ModelAdmin для MyModel, используя саму модель в качестве ключа:

>>> admin.site._registry[MyModel]
<django.contrib.admin.options.ModelAdmin object at 0x10210ba50>
16
ответ дан 2 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: