实现我自己的django.contrib.admin.sites.AdminSite
的最佳方式是什么?
实际上,我在django.contrib.admin.autodiscover
号房登记INSTALLED_APPS
号的时候遇到了一个问题.如果我在urls.py
中使用我的自定义AdminSite类,则管理页面上没有显示任何应用程序.
我用一点小技巧解决了这个问题.我写了这节课:
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
元.
有人知道更好的方法吗?因为我访问的是一个以下划线开头的var,所以它只不过是一个黑客行为.我不喜欢黑客.
Edit:另一种方法是重写django.contrib.admin.autodiscover
函数,但在这种情况下,我会有多余的代码.