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_USE_PAGE_ADMIN=FalseFeinCMS v1.7 では、Django 設定で設定することもできます。

次に、通常どおりサブクラス化PageAdminし、モデル管理者を自分でモデルに登録します。

v1.7 を使用している場合はPageAdmin、からインポートを開始する必要もあります。feincms.module.page.modeladmins

于 2013-03-19T08:27:09.070 に答える
3

ここでの秘訣は、魔法が実行されたためにfeincmsモジュールの登録を解除できないことです。独自のfeincmsPageオブジェクトを登録する代わりに、次のようにメソッドにパッチを適用できます。

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 に答える