您可以覆蓋管理員的queryset
- 方法只顯示用戶的項目:
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_permission
相同! list_select_related
只有在獲取管理員的查詢集時才能立即獲取關係數據,而不是在需要時才使用!
如果您的主要目標只是限制用戶無法與其他對象一起工作,那麼上述接觸將會起作用,如果它變得越來越複雜並且您無法簡單地通過ONE屬性(如用戶)看看django的行級權限提案!
你的代碼的第一次和平工作很好。我也在這裏找到它: http://www.ibm.com/developerworks/opensource/library/os-django-admin/index.html – Jonathan 2010-06-02 20:28:43