1

Django アプリケーションがあり、プロジェクト内にアカウントとストアの 2 つのアプリがあります。私のストア アプリには、Product、Category モデル、およびその他のモデルがあります。

製品を登録できる管理サイトがあります。アカウントでは、一般の人がサインアップしてログインできるようにしています。

ここで、ユーザーが自分の製品を販売できるように、製品を登録できるようにしたいと考えています。ただし、管理サイトへの完全なアクセスは許可したくありません。

管理サイトへの制限付きアクセスを一般ユーザーに許可するにはどうすればよいですか?

ありがとう。

4

2 に答える 2

1

管理者はクラスModelAdminを使用してページをレンダリングしますが、おそらく既にご存知でしょう。そのクラスには、querysetsharafjaffri が示唆するように、サイトにアクセスしているユーザーに基づいて、新しいフィルターに基づいてオーバーライドするメソッドがあります。

しかし、そのフィルタリングだけでは十分ではありません。また、ドロップダウンに表示される値をフィルタリングして、ユーザーが作成した値のみにする必要があります。保存したら、新しいオブジェクトをそれを追加したユーザーのポータルに関連付ける必要があります。

これが私の簡単な未テストの実装です。

class PortalAdmin(admin.ModelAdmin):

    exclude = ('portal',)

    def queryset(self, request):
        """
        Filter the objects displayed in the change_list to only
        display those for the currently signed in user.
        """
        qs = super(UserAdmin, self).queryset(request)
        if request.user.is_superuser:
            return qs
        else:
            return qs.filter(portal=request.user.profile.portal) 

    def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
        the_model = db_field.related.parent_model

        if hasattr(the_model,'portal'):
            kwargs['queryset'] = the_model.objects.filter(portal=request.portal)
        return super(PortalAdmin,self).formfield_for_foreignkey(db_field, request, **kwargs)

    def save_model(self, request, obj, form, change):
        if not change:
            obj.portal = request.portal
        obj.save()
于 2012-06-05T10:50:17.510 に答える