2013-02-09 3 views
6

Sto cercando di trovare un modo per filtrare il set di query di amministrazione per gli oggetti della pagina basate sul utente fornito, quello che ho considerato (pseudo codice):Personalizzazione pagina feincms di amministrazione in base all'utente

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) 

Questo non funziona perché feincms verifica un'istanza di django completamente caricata. Una soluzione verbose sarebbe probabilmente non per caricare il modulo di pagina a tutti, e sia ignorare l'oggetto pagina di modello o di amministrazione, ad esempio:

from feincms... PageAdmin 

class MyPage(Page): 
    objects = CustomManager() 

admin.site.register(MyPage, PageAdmin) 

La documentazione è possibile setup your own page module in modo simile, ma sembra un sacco di configurazione per un semplice requisito.

C'è un modo più semplice per ignorare l'admin queryset o l'amministratore del modello per i moduli feincms?

+0

Non dovrebbe sovrascrivere il [metodo queryset] (http://stackoverflow.com/a/1659129/630877) dello standard 'PageAdmin' lavoro? – arie

+0

@arie, sì ma non nel modo convenzionale, ho appena capito come correggerli correttamente. –

risposta

6

FeinCMS v1.7 permette anche di impostare FEINCMS_USE_PAGE_ADMIN=False nelle impostazioni di Django.

Quindi, inserire semplicemente la sottoclasse PageAdmin come si farebbe normalmente e registrare l'amministratore del modello con il modello.

Si dovrebbe anche iniziare a importare PageAdmin da feincms.module.page.modeladmins se si utilizza la v1.7.

3

Il trucco qui è che non è possibile annullare la registrazione dei moduli feincms a causa di qualche magia eseguita. Invece di registrare il proprio oggetto feincms pagina, è possibile correggere i metodi come questo:

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