我正在使用 django 的 admin 来让用户管理特定模型的模型实例。
每个用户应该只能管理他的模型实例。 (管理员除外,他们应该管理所有内容)。
如何过滤管理员更改列表视图中的对象?
想法:
- 我想最优雅的方法是使用对象级权限。有人知道这个的实施吗?
- 是否可以通过使用 ModelAdmin.changelist_view 覆盖管理员的视图来完成?
- list_select_lated 与它有什么关系吗?
您可以覆盖管理员的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
and 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
仅在获取管理员的查询集以立即从关系中获取相关数据时使用,而不是在需要时使用!
如果您的主要目标只是限制用户无法使用其他对象,则上述方法将起作用,如果它变得更加复杂并且您无法简单地从一个属性(例如用户)判断权限,请查看django 的行级权限建议!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)