Wie verwende ich die benutzerdefinierte AdminSite-Klasse?

Welche ist die beste Art der Umsetzung meiner eigenen django.contrib.admin.sites.AdminSite?

Eigentlich habe ich ein problem mit der Registrierung von INSTALLED_APPS im django.contrib.admin.autodiscover. Wenn ich meine custom-AdminSite-Klasse in urls.pyes wurden keine apps angezeigt, auf der admin Seite.

Ich fixierte diese mit einem kleinen hack. Ich schrieb diese Klasse:

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)

Und implementieren Sie eigene benutzerdefinierte AdminSite wie diese:

from wltrweb.hacks.django.admin import AdminSiteRegistryFix
from django.contrib.admin import AdminSite

class MyAdminSite( AdminSite, AdminSiteRegistryFix ):
    # do some magic
    pass        


site = MyAdminSite()

So kann ich dieses site für urls.py.

Weiß jemand eine bessere Möglichkeit? Da ich Zugriff auf einen var, beginnend mit einem Unterstrich es ist nicht mehr als ein hack. Ich weiß nicht, wie hacks.

Edit: eine Andere Möglichkeit wäre, zu schreiben, die django.contrib.admin.autodiscover Funktion, aber in diesem Fall hätte ich redundante code.

InformationsquelleAutor der Frage svenwltr | 2011-02-02

Schreibe einen Kommentar