2013-02-09 2 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 인스턴스를 확인하기 때문에 작동하지 않습니다. 장황한 솔루션은 아마 모두에서 페이지 모듈을로드 중 페이지 모델 객체 또는 관리자, 예를 오버라이드 (override)하지 않는 것 :

from feincms... PageAdmin 

class MyPage(Page): 
    objects = CustomManager() 

admin.site.register(MyPage, PageAdmin) 

문서는 비슷한 방식으로 setup your own page module 가능하다 상태 만 보인다 간단한 요구 사항에 대한 많은 구성.

feincms 모듈의 admin queryset 또는 model admin을 덮어 쓰는 쉬운 방법이 있습니까?

+0

표준'PageAdmin' 작업의 [queryset 메서드] (http://stackoverflow.com/a/1659129/630877)를 재정의해서는 안됩니까? – arie

+0

@arie, 예,하지만 일반적인 방법은 아닙니다, 저는 방금 올바르게 패치하는 방법을 알아 냈습니다. –

답변

6

FeinCMS의 V1.7은 또한 당신의 장고 설정에서 FEINCMS_USE_PAGE_ADMIN=False을 설정할 수 있습니다.

그런 다음 평소대로 PageAdmin의 서브 클래스를 만들고 모델 관리자에게 직접 모델 관리자를 등록하십시오.

v1.7을 사용하는 경우 feincms.module.page.modeladmins에서 PageAdmin을 가져 오기 시작해야합니다.

3

여기에있는 속임수는 수행 한 마술로 인해 feincms 모듈을 등록 해제 할 수 없다는 것입니다. 대신 자신의 feincms 페이지 객체를 등록, 당신은이 같은 방법을 패치 할 수 있습니다 :

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