我试图根据用户拥有的django监护人的对象权限覆盖get_queryset
,这样只有对象可见,用户才有权使用。
def get_queryset(self, request):
if request.user.is_superuser:
qs = super(MyAdminInline, self).get_queryset(request)
return qs
for item in MyModel.objects.all():
for perm in get_perms(request.user, item):
things_user_can_see = get_objects_for_user(request.user, perm)
return things_user_can_see
可悲的是,这实际上什么都不做,所有项目,无论用户拥有哪些权限,都是可见的。
答案 0 :(得分:1)
首先,您需要了解视图所需的权限。 然后,根据那些权限获取对象。
如果您不知道对象的权限,则可以通过与模型相关的所有权限过滤对象。
Docs用于获取:
from guardian.shortcuts import get_objects_for_user, get_perms_for_model
class MyAdminInline():
def get_queryset(self, request):
if request.user.is_superuser:
qs = super(MyAdminInline, self).get_queryset(request)
return qs
all_model_perms = get_perms_for_model(MyModel)
return get_objects_for_user(request.user, all_model_perms)
就是这样!不循环遍历每个单个对象,检查权限并返回错误的方式。