Skip to content

Commit dc7a823

Browse files
anderskbigBrain1901
authored andcommitted
user_groups: Work around django-cte bug with Django 4.2.
dimagi/django-cte#66 Signed-off-by: Anders Kaseorg <anders@zulip.com>
1 parent 9009407 commit dc7a823

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

zerver/lib/user_groups.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Dict, Iterable, List, Sequence, TypedDict
22

3-
from django.db.models import QuerySet
3+
from django.db.models import F, QuerySet
44
from django.utils.translation import gettext as _
55
from django_cte import With
66
from django_stubs_ext import ValuesQuerySet
@@ -157,10 +157,10 @@ def get_direct_memberships_of_users(user_group: UserGroup, members: List[UserPro
157157
def get_recursive_subgroups(user_group: UserGroup) -> QuerySet[UserGroup]:
158158
cte = With.recursive(
159159
lambda cte: UserGroup.objects.filter(id=user_group.id)
160-
.values("id")
161-
.union(cte.join(UserGroup, direct_supergroups=cte.col.id).values("id"))
160+
.values(group_id=F("id"))
161+
.union(cte.join(UserGroup, direct_supergroups=cte.col.group_id).values(group_id=F("id")))
162162
)
163-
return cte.join(UserGroup, id=cte.col.id).with_cte(cte)
163+
return cte.join(UserGroup, id=cte.col.group_id).with_cte(cte)
164164

165165

166166
def get_recursive_group_members(user_group: UserGroup) -> QuerySet[UserProfile]:
@@ -169,11 +169,11 @@ def get_recursive_group_members(user_group: UserGroup) -> QuerySet[UserProfile]:
169169

170170
def get_recursive_membership_groups(user_profile: UserProfile) -> QuerySet[UserGroup]:
171171
cte = With.recursive(
172-
lambda cte: user_profile.direct_groups.values("id").union(
173-
cte.join(UserGroup, direct_subgroups=cte.col.id).values("id")
172+
lambda cte: user_profile.direct_groups.values(group_id=F("id")).union(
173+
cte.join(UserGroup, direct_subgroups=cte.col.group_id).values(group_id=F("id"))
174174
)
175175
)
176-
return cte.join(UserGroup, id=cte.col.id).with_cte(cte)
176+
return cte.join(UserGroup, id=cte.col.group_id).with_cte(cte)
177177

178178

179179
def is_user_in_group(

0 commit comments

Comments
 (0)