Skip to content

Commit 8851435

Browse files
authored
Merge pull request #155 from taigaio/performance-patch
Tweak membership queries
2 parents 5d7d323 + 5990da2 commit 8851435

File tree

2 files changed

+28
-28
lines changed

2 files changed

+28
-28
lines changed

taiga/projects/services/projects.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,17 @@ def check_if_project_privacy_can_be_changed(project):
4242
user_id__isnull=False) |
4343
Q(project_id=project.pk, # current project members
4444
user_id__isnull=False))
45-
.order_by("user_id")
46-
.distinct("user_id")
45+
.values("user_id")
46+
.distinct()
4747
.count()) # Just confirmed members
4848

4949
current_memberships += (Membership.objects.filter(Q(project__is_private=not project.is_private, # public/private members
5050
project__owner_id=project.owner_id,
5151
user_id__isnull=True) |
5252
Q(project_id=project.pk, # current project members
5353
user_id__isnull=True))
54-
.order_by("email")
55-
.distinct("email")
54+
.values("email")
55+
.distinct()
5656
.count()) # Just pending members
5757

5858
if project.is_private:
@@ -90,14 +90,14 @@ def check_if_project_can_be_created_or_updated(project):
9090
current_memberships = (Membership.objects.filter(project__is_private=project.is_private,
9191
project__owner_id=project.owner_id,
9292
user_id__isnull=False)
93-
.order_by("user_id")
94-
.distinct("user_id")
93+
.values("user_id")
94+
.distinct()
9595
.count()) # Just confirmed members
9696
current_memberships += (Membership.objects.filter(project__is_private=project.is_private,
9797
project__owner_id=project.owner_id,
9898
user_id__isnull=True)
99-
.order_by("email")
100-
.distinct("email")
99+
.values("email")
100+
.distinct()
101101
.count()) # Pending members
102102

103103
if project.is_private:
@@ -138,16 +138,16 @@ def check_if_project_can_be_transfered(project, new_owner):
138138
user_id__isnull=False) |
139139
Q(project_id=project.pk, # current project members
140140
user_id__isnull=False))
141-
.order_by("user_id")
142-
.distinct("user_id")
141+
.values("user_id")
142+
.distinct()
143143
.count()) # Just confirmed members
144144
current_memberships += (Membership.objects.filter(Q(project__is_private=project.is_private, # public/private members
145145
project__owner_id=new_owner.id,
146146
user_id__isnull=True) |
147147
Q(project_id=project.pk, # current project members
148148
user_id__isnull=True))
149-
.order_by("email")
150-
.distinct("email")
149+
.values("email")
150+
.distinct()
151151
.count()) # Pending members
152152

153153
if project.is_private:
@@ -185,14 +185,14 @@ def check_if_project_can_be_duplicate(project, new_owner, new_is_private, new_us
185185
actual_user_id_members = (Membership.objects.filter(project__is_private=new_is_private,
186186
project__owner_id=new_owner.id,
187187
user_id__isnull=False)
188-
.order_by("user_id")
189-
.distinct("user_id")
188+
.values("user_id")
189+
.distinct()
190190
.values_list("user__id", flat=True))
191191
total_pending_members = (Membership.objects.filter(project__is_private=new_is_private,
192192
project__owner_id=new_owner.id,
193193
user_id__isnull=True)
194-
.order_by("email")
195-
.distinct("email")
194+
.values("email")
195+
.distinct()
196196
.count())
197197

198198
current_memberships = len(
@@ -237,14 +237,14 @@ def check_if_project_is_out_of_owner_limits(project):
237237
current_memberships = (Membership.objects.filter(project__is_private=project.is_private,
238238
project__owner_id=project.owner_id,
239239
user_id__isnull=False)
240-
.order_by("user_id")
241-
.distinct("user_id")
240+
.values("user_id")
241+
.distinct()
242242
.count()) # Current confirmed members
243243
current_memberships += (Membership.objects.filter(project__is_private=project.is_private,
244244
project__owner_id=project.owner_id,
245245
user_id__isnull=True)
246-
.order_by("email")
247-
.distinct("email")
246+
.values("email")
247+
.distinct()
248248
.count()) # Pending members
249249

250250
if project.is_private:

taiga/users/admin.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -179,13 +179,13 @@ def total_memberships_private_projects(self, obj):
179179
accepted = (Membership.objects.filter(project__is_private=True,
180180
project__owner_id=obj.id,
181181
user_id__isnull=False)
182-
.order_by("user_id")
183-
.distinct("user_id").count())
182+
.values("user_id")
183+
.distinct().count())
184184
pending = (Membership.objects.filter(project__is_private=True,
185185
project__owner_id=obj.id,
186186
user_id__isnull=True)
187-
.order_by("email")
188-
.distinct("email").count())
187+
.values("email")
188+
.distinct().count())
189189
total = pending + accepted
190190
return mark_safe(f"{total}{SEPARATOR}<i>{accepted} accepted</i>{SEPARATOR}<i>{pending} pending</i>")
191191

@@ -203,13 +203,13 @@ def total_memberships_public_projects(self, obj):
203203
accepted = (Membership.objects.filter(project__is_private=False,
204204
project__owner_id=obj.id,
205205
user_id__isnull=False)
206-
.order_by("user_id")
207-
.distinct("user_id").count())
206+
.values("user_id")
207+
.distinct().count())
208208
pending = (Membership.objects.filter(project__is_private=False,
209209
project__owner_id=obj.id,
210210
user_id__isnull=True)
211-
.order_by("email")
212-
.distinct("email").count())
211+
.values("email")
212+
.distinct().count())
213213
total = pending + accepted
214214
return mark_safe(f"{total}{SEPARATOR}<i>{accepted} accepted</i>{SEPARATOR}<i>{pending} pending</i>")
215215

0 commit comments

Comments
 (0)