6

我试图找到一种方法来根据提供的用户过滤页面对象的管理查询集,我考虑过什么(伪代码):

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 模块的管理查询集或模型管理?

4

2 回答 2

6

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

然后,PageAdmin像往常一样进行子类化,并自己注册模型管理员。

如果您使用的是 v1.7,您还应该开始导入PageAdminfeincms.module.page.modeladmins

于 2013-03-19T08:27:09.070 回答
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
于 2013-02-09T14:09:45.103 回答