diff --git a/src/documents/tests/test_views.py b/src/documents/tests/test_views.py index 57562c02c..4fa8fa833 100644 --- a/src/documents/tests/test_views.py +++ b/src/documents/tests/test_views.py @@ -237,7 +237,7 @@ class TestViews(DirectoriesMixin, TestCase): WHEN: - Request to get tag list with full permissions is made THEN: - - Permissions are not queries in database tag by tag, + - Permissions are not queried in database tag by tag, i.e. there are no N+1 queries """ view_permissions = Permission.objects.filter( diff --git a/src/documents/views.py b/src/documents/views.py index bce7428cd..cf103f9a7 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -264,13 +264,6 @@ class BulkPermissionMixin: Prefetch Django-Guardian permissions for a list before serialization, to avoid N+1 queries. """ - def get_permission_codenames(self): - model_name = self.queryset.model.__name__.lower() - return { - "view": f"view_{model_name}", - "change": f"change_{model_name}", - } - def _get_object_perms( self, objects: list, @@ -332,22 +325,32 @@ class BulkPermissionMixin: else: queryset = self.filter_queryset(self.get_queryset()) - codenames = self.get_permission_codenames() - perm_names = [codenames["view"], codenames["change"]] - user_perms = self._get_object_perms(queryset, perm_names, actor="users") - group_perms = self._get_object_perms(queryset, perm_names, actor="groups") + model_name = self.queryset.model.__name__.lower() + permission_name_view = f"view_{model_name}" + permission_name_change = f"change_{model_name}" + + user_perms = self._get_object_perms( + objects=queryset, + perm_codenames=[permission_name_view, permission_name_change], + actor="users", + ) + group_perms = self._get_object_perms( + objects=queryset, + perm_codenames=[permission_name_view, permission_name_change], + actor="groups", + ) context["users_view_perms"] = { - pk: user_perms[pk][codenames["view"]] for pk in user_perms + pk: user_perms[pk][permission_name_view] for pk in user_perms } context["users_change_perms"] = { - pk: user_perms[pk][codenames["change"]] for pk in user_perms + pk: user_perms[pk][permission_name_change] for pk in user_perms } context["groups_view_perms"] = { - pk: group_perms[pk][codenames["view"]] for pk in group_perms + pk: group_perms[pk][permission_name_view] for pk in group_perms } context["groups_change_perms"] = { - pk: group_perms[pk][codenames["change"]] for pk in group_perms + pk: group_perms[pk][permission_name_change] for pk in group_perms } return context