1

私はdjangoの管理者を使用して、ユーザーが特定のモデルのモデルインスタンスを管理できるようにしています。各ユーザーは、自分のモデルインスタンスのみを管理できる必要があります。(すべてを管理する必要がある管理者を除く)。

管理者のチェンジリストビューでオブジェクトをフィルタリングするにはどうすればよいですか?

考え:

4

1 に答える 1

9

adminのqueryset-methodをオーバーライドして、ユーザーのアイテムのみを表示できます。

    def queryset(self, request):
        user = getattr(request, 'user', None)
        qs = super(MyAdmin, self).queryset(request)
        if user.is_superuser:
            return qs
        return qs.filter(user=user)

has_change_permissionそれに加えて、次のように、メソッドとhas_delete_permissionメソッドにも注意する必要があります。

    def has_delete_permission(self, request, obj=None):   
        if not request.user == obj.user and not request.user.is_superuser:
            return False
        return super(MyAdmin, self).has_delete_permission(request, obj)

同じですhas_change_permissionlist_select_related管理者のクエリセットを取得して関連データも関係からすぐに取得する場合にのみ使用され、必要な場合には使用されません。

あなたの主な目標がユーザーが他のオブジェクトを操作できないように制限することだけである場合、上記のアプローチは機能します、それがより複雑になり、ユーザーのような1つの属性からのみアクセス許可を伝えることができない場合は、調べてください行レベルの権限に関するdjangoの提案!

于 2010-06-01T20:39:17.520 に答える