Есть ли какой-либо официальный способ получить параметры администратора модели?
Мне нужно получить свойство search_fields
, определенное в параметрах admin для модели. Давным-давно это было очень просто и прямо (но недокументировано), т.е. 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
сначала создать модель
from django.contrib.auth.models import User
from django.core.exceptions import ValidationError
from django.db import models
class LocationCode(models.Model):
"""
A web service that will allow user to create there price rule based on conditions
"""
name = models.CharField(max_length=255)
code = models.CharField(max_length=255)
def __unicode__(self):
return self.name
в admin.py вам нужно добавить код
from django.contrib import admin
from dx_man.models import LocationCode
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class LocationAdmin(admin.ModelAdmin):
list_display=[]
for x in LocationCode._meta.get_all_field_names():
list_display.append(str(x))
admin.site.register(LocationCode, LocationAdmin)
в url.py добавьте эту строку
from django.contrib import admin
admin.autodiscover()
Ответ 2
Вам необходимо убедиться, что код регистрации запущен или сайт не будет содержать (model, modeladmin) в _registry.
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)