2013-02-09 14 views
6

我試圖找到一種方法來篩選所提供的基於用戶的頁面向上對象管理員查詢集的feincms頁面的管理,我所考慮的(僞代碼):定製基於用戶

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) 

這不會工作,因爲feincms檢查完全加載的django實例。一個鬆散的解決方案很可能是不加載在所有頁面模塊,並且無論是重寫頁面模型對象或管理,如:

from feincms... PageAdmin 

class MyPage(Page): 
    objects = CustomManager() 

admin.site.register(MyPage, PageAdmin) 

文檔狀態有可能setup your own page module以類似的方式,但它似乎很多簡單要求的配置。

是否有更簡單的方法來覆蓋feincms模塊的管理查詢集或模型管理員?

+0

不應該重寫標準'PageAdmin'的[queryset method](http://stackoverflow.com/a/1659129/630877)工作嗎? – arie 2013-02-09 13:49:22

+0

@arie,是的,但不是以傳統的方式,我只是想出瞭如何正確地修補它們。 – 2013-02-09 14:10:32

回答

6

FeinCMS V1.7還允許您設置你的Django設置FEINCMS_USE_PAGE_ADMIN=False

然後,像通常那樣只需要子類PageAdmin,然後自己向模型管理員註冊模型。

如果您使用的是v1.7,您還應該從feincms.module.page.modeladmins開始導入PageAdmin

3

這裏的訣竅是你不能取消註冊feincms模塊,因爲執行了一些魔法。而不是註冊自己feincms Page對象的,你可以修補這樣的方法:

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