Как каждый проверяет, чтобы видеть, существует ли modeladmin для данной модели?
modeladmins создаются путем регистрации модели с объектом admin.site. как можно проверить объект сайта видеть, какие модели были зарегистрированы, и с который admin_class?
Интересный вопрос, который заставил меня немного покопаться.
После регистрации классов администратора они хранятся в атрибуте объекта 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>