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