]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Fix shared by me filter with multiple users / groups in postgres (#5396)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Mon, 15 Jan 2024 22:06:59 +0000 (14:06 -0800)
committerGitHub <noreply@github.com>
Mon, 15 Jan 2024 22:06:59 +0000 (22:06 +0000)
src/documents/filters.py

index bab20a4dc0fa53db52ff9dfd397c6248a697b719..b760b977959f4df0dc3e5f13e7432644a966d7d9 100644 (file)
@@ -114,6 +114,8 @@ class SharedByUser(Filter):
         ctype = ContentType.objects.get_for_model(self.model)
         UserObjectPermission = get_user_obj_perms_model()
         GroupObjectPermission = get_group_obj_perms_model()
+        # see https://github.com/paperless-ngx/paperless-ngx/issues/5392, we limit subqueries
+        # to 1 because Postgres doesn't like returning > 1 row, but all we care about is > 0
         return (
             qs.filter(
                 owner_id=value,
@@ -123,7 +125,7 @@ class SharedByUser(Filter):
                     UserObjectPermission.objects.filter(
                         content_type=ctype,
                         object_pk=Cast(OuterRef("pk"), CharField()),
-                    ).values("user_id"),
+                    ).values("user_id")[:1],
                 ),
             )
             .annotate(
@@ -131,7 +133,7 @@ class SharedByUser(Filter):
                     GroupObjectPermission.objects.filter(
                         content_type=ctype,
                         object_pk=Cast(OuterRef("pk"), CharField()),
-                    ).values("group_id"),
+                    ).values("group_id")[:1],
                 ),
             )
             .filter(