Настройка администратора страницы 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 ответа

Решение

FeinCMS v1.7 также позволяет установить FEINCMS_USE_PAGE_ADMIN=False в ваших настройках Django.

Тогда просто подкласс PageAdmin как обычно, и зарегистрируйте администратора модели вместе с моделью.

Вы также должны начать импорт PageAdmin от feincms.module.page.modeladmins если вы используете v1.7.

Хитрость здесь в том, что вы не можете отменить регистрацию модулей feincms из-за какого-то волшебства. Вместо того, чтобы регистрировать свой собственный объект Page 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
Другие вопросы по тегам