Jon*_*han 1 django django-models django-admin changelist
我正在使用django的管理员让用户管理特定模型的模型实例.每个用户应该只能管理他的模型实例.(除了管理所有人的管理员外).
如何过滤管理员更改列表视图中的对象?
思考:
您可以覆盖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)
Run Code Online (Sandbox Code Playgroud)
除此之外,你还应该注意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)
Run Code Online (Sandbox Code Playgroud)
同样的has_change_permission
!
list_select_related
仅在获取管理员的查询集时才使用,以便立即从关系中获取相关数据,而不是在需要时!
如果您的主要目标只是限制用户无法使用其他对象,则上述approch将起作用,如果它变得越来越复杂并且您无法简单地从ONE属性(如用户)告知权限,请查看django的提议是行级权限!
归档时间: |
|
查看次数: |
1590 次 |
最近记录: |