有没有官方方法来获取模型的管理选项?

时间:2015-12-06 16:41:29

标签: python django

我需要进入模型管理选项上定义的search_fields属性。很久以前,它非常简单直接(但没有记录),即model._meta.admin.search_fields

到达管理员是困难的部分,我能得到的最接近的是:

def admin_options(model):
    from django.contrib import admin
    return admin.site._registry.get(model)

我无法找到记录的._registry成员(并且下划线似乎暗示它不公开)。这对于无法运行admin.autodiscover()的网站也不起作用。后备代码执行此操作:

try:
    appname = model.__module__.split('.models')[0]
    admin_module = appname + '.admin'
    __import__(admin_module)  # registers admin option classes with AdminSite
except:
    return None
else:
   return admin.site._registry.get(model)

是否有官方(或更简单)方式获取模型的管理选项?

1 个答案:

答案 0 :(得分:1)

您需要确保注册代码已经运行,或者网站不会包含_registry中的(model,modeladmin)。

code.py

from django.contrib.admin.sites import site

# run admin registration code before we get here
for model, model_admin in site._registry.items():
    if model == whatevermodel: 
        print(model_admin.search_fields)