2013-02-09 7 views
6

Ich versuche, einen Weg zu finden, den Admin-queryset für Seite Objekte auf dem Benutzer zur Verfügung gestellt Basis bis zu filtern, was ich (Pseudo-Code) betrachtet:Anpassen der feincms Admin-Seite basierend auf Benutzer

from feincms... Page 

class MyPageAdmin(PageAdmin): 
    def __init__(self, *args, **kwargs): 
     'monkey business' 
     super(MyPageAdmin, self).__init__(*args, **kwargs) 

admin.site.unregister(Page) 
admin.site.register(Page, MyPageAdmin) 

Dies funktioniert nicht, weil feincms nach einer vollständig geladenen Django-Instanz sucht. Eine ausführliche Lösung wäre wahrscheinlich nicht das Seitenmodul überhaupt zu laden, und entweder das Seite Modellobjekt oder Admin außer Kraft setzen, zum Beispiel:

from feincms... PageAdmin 

class MyPage(Page): 
    objects = CustomManager() 

admin.site.register(MyPage, PageAdmin) 

In der Dokumentation wird es setup your own page module in ähnlicher Art und Weise möglich ist, aber es scheint, viel Konfiguration für eine einfache Anforderung.

Gibt es eine einfachere Möglichkeit, den Admin-Abfrage-Set oder den Model-Admin für das Modul zu deaktivieren?

+0

Sollte die [queryset Methode] (http://stackoverflow.com/a/1659129/630877) des Standard 'PageAdmin's nicht überschrieben werden? – arie

+0

@arie, ja, aber nicht auf die herkömmliche Weise, ich habe gerade herausgefunden, wie man sie richtig patcht. –

Antwort

6

FeinCMS v1.7 auch Sie FEINCMS_USE_PAGE_ADMIN=False in Ihren Django-Einstellungen festlegen kann.

Dann, nur Unterklasse PageAdmin wie Sie normalerweise, und registrieren Sie das Modell admin mit dem Modell selbst.

Sie sollten auch PageAdmin von feincms.module.page.modeladmins importieren, wenn Sie v1.7 verwenden.

3

Der Trick hier ist, Sie können nicht die Registrierung der FEINcms Module wegen einiger Magie durchgeführt werden. Statt Ihr eigenes feincms Page-Objekt zu registrieren, können Sie die Methoden, wie dieser Patch:

from django.conf import settings 
from feincms.module.page.models import PageAdmin 

def queryset(self, request): 
    qs = super(PageAdmin, self).queryset(request) 
    if request.user.is_superuser: 
     return qs 
    return qs.filter(site__id__exact=settings.SITE_ID) 
PageAdmin.queryset = queryset