我目前正在对所有对象进行非常笨拙的循环,但这会变得很慢:
videos = Video.objects.all()
video_list = []
for video in videos:
checker = ObjectPermissionChecker(request.user)
if checker.has_perm('view_video', video):
video_list.append(video)
我想一定有一种方法可以获取该用户有权访问的所有对象。
最佳答案
几天前更新了名为“get_objects_for_user”的新快捷函数。如果您使用旧版本的监护人并且无法更新,您可以简单地从那里复制代码。
from guardian.shortcuts import get_objects_for_user
...
videos = get_objects_for_user(request.user, "view_video", Video.objects.all())
它总是做 3 次查询。如果将“use_groups”参数指定为 False,则会执行 2 个查询,但返回的查询集将不包含用户组对其具有权限的对象。如果需要,您还可以指定代号列表,而不是单一权限。 Read more here .
关于python - 如何获取用户在 django guardian 中具有特定权限的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663694/