Какой лучший способ реализовать мои собственные django.contrib.admin.sites.AdminSite
?
На самом деле у меня возникает проблема с регистрацией INSTALLED_APPS
в django.contrib.admin.autodiscover
.Если я использую свой пользовательский класс AdminSite в urls.py
, на странице администратора не было приложений.
Я исправил это с помощью небольшого взлома.Я написал этот класс:
from django.contrib.admin.sites import site as default_site
class AdminSiteRegistryFix( object ):
'''
This fix links the '_registry' property to the orginal AdminSites
'_registry' property. This is necessary, because of the character of
the admins 'autodiscover' function. Otherwise the admin site will say,
that you havn't permission to edit anything.
'''
def _registry_getter(self):
return default_site._registry
def _registry_setter(self,value):
default_site._registry = value
_registry = property(_registry_getter, _registry_setter)
И реализовал мой пользовательский AdminSite следующим образом:
from wltrweb.hacks.django.admin import AdminSiteRegistryFix
from django.contrib.admin import AdminSite
class MyAdminSite( AdminSite, AdminSiteRegistryFix ):
# do some magic
pass
site = MyAdminSite()
Так что я могу использовать этот site
для urls.py
.
Кто-нибудь знает лучший способ?Поскольку я получаю доступ к переменной, начинающейся с подчеркивания, это не более чем хак.Я не люблю хаки.
Редактировать: Другим способом было бы переписать функцию django.contrib.admin.autodiscover
, но в этом случае у меня был бы избыточный код.