1
我使用django-guardian作爲對象級權限。文檔如何將其整合到自己的代碼是好的: http://packages.python.org/django-guardian/userguide/admin-integration.html將對象級權限添加到其他APP的管理界面(例如,auth)
但是,我怎樣才能將其添加到其他應用程序的模型?我不想修改例如django.contrib.auth。
我使用django-guardian作爲對象級權限。文檔如何將其整合到自己的代碼是好的: http://packages.python.org/django-guardian/userguide/admin-integration.html將對象級權限添加到其他APP的管理界面(例如,auth)
但是,我怎樣才能將其添加到其他應用程序的模型?我不想修改例如django.contrib.auth。
我在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)