根据用户自定义feincms页面管理员

时间:2013-02-09 13:06:54

标签: python django django-admin 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实例。一个详细的解决方案可能根本不是加载页面模块,而是覆盖页面模型对象或admin,例如:

from feincms... PageAdmin

class MyPage(Page):
    objects = CustomManager()

admin.site.register(MyPage, PageAdmin)

文档说明可以以类似的方式setup your own page module,但对于简单的要求似乎有很多配置。

是否有更简单的方法来覆盖feincms模块的管理查询集或模型管理员?

2 个答案:

答案 0 :(得分:6)

FeinCMS v1.7还允许您在Django设置中设置FEINCMS_USE_PAGE_ADMIN=False

然后,像通常那样只是子类PageAdmin,并自己注册模型管理员。

如果你正在使用v1.7,你也应该从PageAdmin开始导入feincms.module.page.modeladmins

答案 1 :(得分: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