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

the*_*orn 14 python django

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

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

def admin_options(model):
    from django.contrib import admin
    return admin.site._registry.get(model)
Run Code Online (Sandbox Code Playgroud)

我找不到记录的._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)
Run Code Online (Sandbox Code Playgroud)

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

Vic*_*ral 1

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

代码.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)
Run Code Online (Sandbox Code Playgroud)