1

オブジェクト レベルのアクセス許可には django-guardian を使用します。これを独自のコードに統合する方法のドキュメントは良いです: http://packages.python.org/django-guardian/userguide/admin-integration.html

しかし、これを他のアプリのモデルに追加するにはどうすればよいでしょうか? django.contrib.auth などのコードを変更したくありません。

4

1 に答える 1

1

django-reversion のソース コードで解決策を見つけました。というヘルパーがいpatch_admin()ます。これは、django-guardian 用に変更されたスニペットです。

# Copy of django-reversion helpers.py
def patch_admin(model, admin_site=None):
    """
    Enables version control with full admin integration for a model that has
    already been registered with the django admin site.

    This is excellent for adding version control to existing Django contrib
    applications. 
    """
    admin_site = admin_site or admin.site
    try:
        ModelAdmin = admin_site._registry[model].__class__
    except KeyError:
        raise NotRegistered, "The model %r has not been registered with the admin site." % model
    # Unregister existing admin class.
    admin_site.unregister(model)
    # Register patched admin class.
    class PatchedModelAdmin(GuardedModelAdmin, VersionAdmin, ModelAdmin): # Remove VersionAdmin, if you don't use reversion.
        pass
    admin_site.register(model, PatchedModelAdmin)

from django.contrib.auth.models import Group
patch_admin(Group)
于 2012-04-19T14:09:44.693 に答える