基于用户自定义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)
文档中提到可以以类似的方式设置你自己的页面模块,但这似乎对于一个简单的需求来说配置太多了。
有没有更简单的方法来重写feincms模块的管理查询集或模型管理呢?
2 个回答
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
6
FeinCMS v1.7 还允许你在 Django 的设置中把 FEINCMS_USE_PAGE_ADMIN=False
进行设置。
然后,你可以像平常一样去创建一个 PageAdmin
的子类,并自己把模型的管理注册上去。
如果你在使用 v1.7,记得开始从 feincms.module.page.modeladmins
导入 PageAdmin
。