django:检查给定模型的modeladmin

Cod*_*ngo 13 django django-admin

如何检查给定模型的modeladmin是否存在?

通过使用admin.site对象注册模型来创建modeladmins.如何检查站点对象以查看已注册的模型以及admin_class?

Dan*_*man 16

有趣的问题,这让我做了一点挖掘.

一旦注册了管理类,它们就会存储在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)
Run Code Online (Sandbox Code Playgroud)

一旦实际导入了 - 通常是通过admin.autodiscover()urls.py中的行 - admin.site._registry将包含这样的内容:

{<class 'myapp.models.MyModel'>: 
    <django.contrib.admin.options.ModelAdmin object at 0x10210ba50>}
Run Code Online (Sandbox Code Playgroud)

并且您将MyModel通过使用模型本身作为键来获取ModelAdmin对象:

>>> admin.site._registry[MyModel]
<django.contrib.admin.options.ModelAdmin object at 0x10210ba50>
Run Code Online (Sandbox Code Playgroud)