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) ctype = ContentType.objects.get_for_model(self.model)
UserObjectPermission = get_user_obj_perms_model() UserObjectPermission = get_user_obj_perms_model()
GroupObjectPermission = get_group_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 ( return (
qs.filter( qs.filter(
owner_id=value, owner_id=value,
@ -123,7 +125,7 @@ class SharedByUser(Filter):
UserObjectPermission.objects.filter( UserObjectPermission.objects.filter(
content_type=ctype, content_type=ctype,
object_pk=Cast(OuterRef("pk"), CharField()), object_pk=Cast(OuterRef("pk"), CharField()),
).values("user_id"), ).values("user_id")[:1],
), ),
) )
.annotate( .annotate(
@ -131,7 +133,7 @@ class SharedByUser(Filter):
GroupObjectPermission.objects.filter( GroupObjectPermission.objects.filter(
content_type=ctype, content_type=ctype,
object_pk=Cast(OuterRef("pk"), CharField()), object_pk=Cast(OuterRef("pk"), CharField()),
).values("group_id"), ).values("group_id")[:1],
), ),
) )
.filter( .filter(