Skip to content

Commit 338af6f

Browse files
authored
Prefetch and Select related objects in the PeopleView. (#2029)
Change template to loop through member list for each column, instead of making new queries.
1 parent df0cf74 commit 338af6f

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

src/people/templates/people.html

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,23 @@ <h4 class="card-title">
3434
{{ team.name }} Team
3535
</td>
3636
<td>
37-
{% for resp in team.leads.all %}
38-
{{ resp.profile.get_public_credit_name }}<br>
37+
{% for member in team.teammember_set.all %}
38+
{% if member.approved and member.lead %}
39+
{{ member.user.profile.get_public_credit_name }}<br>
40+
{% endif %}
3941
{% endfor %}
4042
</td>
4143
<td>
42-
{% for member in team.regular_members.all %}
43-
{% if member.profile.get_public_credit_name != "Unnamed" %}
44-
{{ member.profile.get_public_credit_name }}<br>
44+
{% for member in team.teammember_set.all %}
45+
{% if member.approved and not member.lead and member.user.profile.get_public_credit_name != "Unnamed" %}
46+
{{ member.user.profile.get_public_credit_name }}<br>
4547
{% endif %}
4648
{% empty %}
4749
No team members
4850
{% endfor %}
4951
{% if team.unnamed_members %}
50-
{% if team.unnamed_members.count < team.regular_members.count %}Plus {% endif %}<b>{{ team.unnamed_members.count }}</b> anonymous member(s).
52+
{% if team.unnamed_members.count < team.regular_members.count %}Plus {% endif %}
53+
<b>{{ team.unnamed_members.count }}</b> anonymous member(s).
5154
{% endif %}
5255
</td>
5356
</tr>

src/people/views.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,23 @@
11
from __future__ import annotations
22

33
from django.views.generic import ListView
4+
from django.db.models import Prefetch
45

56
from camps.models import Camp
7+
from teams.models import TeamMember
68

79

810
class PeopleView(ListView):
911
template_name = "people.html"
1012
model = Camp
13+
14+
def get_queryset(self):
15+
"""Prefetch and Select related models for performance optimization."""
16+
return super().get_queryset().prefetch_related(
17+
"teams",
18+
Prefetch(
19+
"teams__teammember_set",
20+
queryset=TeamMember.objects.select_related("user__profile")
21+
)
22+
)
23+

0 commit comments

Comments
 (0)