Fix shared by me filter with multiple users / groups in postgres (#5396)

This commit is contained in:
shamoon 2024-01-15 14:06:59 -08:00 committed by GitHub
parent b8e3dc2dd8
commit f3ff7b046f

View 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(