2010-06-02 51 views

回答

14

有趣的问题,这激起我做了一点挖掘。

一旦管理员类已经注册,它们就被存储在site对象的一个​​属性中,这个属性被称为 - 并不意外 - _registry。这是一个modellamin类模型类的字典 - 注意键和值都是,而不是名称。

所以,如果你有一个这样的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) 

那么一旦实际已进口的 - 通常是通过在urls.py的admin.autodiscover()线 - admin.site._registry将包含这样的事情:

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

,你会使用模型本身为重点,得到MyModel的对象的ModelAdmin:

>>> admin.site._registry[MyModel] 
<django.contrib.admin.options.ModelAdmin object at 0x10210ba50> 
+0

嗯...这也是我的第一次尝试,但在_registry中没有任何东西..可能是因为我从manage.py shell中检查,并且自动发现未被调用。这可能是! – 2010-06-02 08:17:18

+0

谢谢!在** Django 1.4 **中完美工作,但是没有一种方法可以直接从模型中访问ModelAdmin?它会比我的方法更漂亮:'admin.site._registry [obj .__ class __]':) – caesarsol 2013-09-05 12:29:54

+0

@caesarsol你的模型应该对MVC一无所知 - Django不是真正的MVC,但接近它 – 2015-07-17 13:18:31