如何在django监护人中获取用户具有特定权限的所有对象?

wil*_*low 3 python django permissions

我目前正在对所有对象进行一个非常笨拙的循环,但这会变慢:

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)
Run Code Online (Sandbox Code Playgroud)

我认为必须有一种方法来获取该用户拥有权限的所有对象.

luk*_*szb 10

几天前,有一个名为"get_objects_for_user"的新快捷方式更新了.如果您使用较旧版本的监护人且无法更新,则只需从中复制代码即可.

from guardian.shortcuts import get_objects_for_user
...
videos = get_objects_for_user(request.user, "view_video", Video.objects.all())
Run Code Online (Sandbox Code Playgroud)

它总是做3个查询.如果将"use_groups"参数指定为False,则会执行2个查询,但返回的查询集将不包含用户组具有权限的对象.您还可以指定代码列表,而不是单个权限(如果需要).在这里阅读更多.