11
如何检查给定模型是否存在modeladmin?django:检查给定模型的modeladmin
modeladmins通过向admin.site对象注册模型来创建。如何检查站点对象以查看哪些模型已注册,以及与哪个admin_class?
如何检查给定模型是否存在modeladmin?django:检查给定模型的modeladmin
modeladmins通过向admin.site对象注册模型来创建。如何检查站点对象以查看哪些模型已注册,以及与哪个admin_class?
有趣的问题,这激起我做了一点挖掘。
一旦管理员类已经注册,它们就被存储在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>
嗯...这也是我的第一次尝试,但在_registry中没有任何东西..可能是因为我从manage.py shell中检查,并且自动发现未被调用。这可能是! – 2010-06-02 08:17:18
谢谢!在** Django 1.4 **中完美工作,但是没有一种方法可以直接从模型中访问ModelAdmin?它会比我的方法更漂亮:'admin.site._registry [obj .__ class __]':) – caesarsol 2013-09-05 12:29:54
@caesarsol你的模型应该对MVC一无所知 - Django不是真正的MVC,但接近它 – 2015-07-17 13:18:31