2013-02-09 24 views
6

Staram się znaleźć sposób, aby filtrować queryset dla obiektów administratora strony opartej się na dostarczonych przez użytkownika, co ja uważane (pseudo kod):Dostosowywanie administratorem strony feincms podstawie użytkownik

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) 

To nie zadziała, ponieważ feincms sprawdza dla całkowicie załadowanego wystąpienia django. Gadatliwy rozwiązanie prawdopodobnie byłby nie załadować moduł strona w ogóle, i albo zastąpić obiekt strona modelu lub administratora, np

from feincms... PageAdmin 

class MyPage(Page): 
    objects = CustomManager() 

admin.site.register(MyPage, PageAdmin) 

Dokumentacja wskazuje możliwe jest setup your own page module w podobny sposób, ale wydaje się, dużo konfiguracji dla prostych wymagań.

Czy istnieje łatwiejszy sposób, aby zastąpić queryset administratora lub modelu admin modułów feincms?

+0

nie powinien nadpisanie metody [queryset] (http://stackoverflow.com/a/1659129/630877) standardowego 'PageAdmin' pracy? – arie

+0

@arie, tak, ale nie w sposób konwencjonalny, po prostu wymyśliłem, jak poprawiać je poprawnie. –

Odpowiedz

6

FeinCMS v1.7 pozwala także ustawić FEINCMS_USE_PAGE_ADMIN=False w ustawieniach Django.

Potem tylko podklasy PageAdmin jak zwykle, i zarejestrować model admina z modelu samodzielnie.

Należy również rozpocząć importowanie PageAdmin z feincms.module.page.modeladmins, jeśli używasz wersji 1.7.

3

Sztuką jest tu nie można wyrejestrować moduły feincms powodu jakiejś magii ruchu. Zamiast rejestracji własny obiekt feincms stronie można załatać metody takie jak to:

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