Skip to content

Commit ffdd800

Browse files
committed
perf(announcements): add prefetch query in status view and tighten perms
Greatly reduces load time
1 parent 7345d9e commit ffdd800

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

intranet/apps/announcements/views.py

+9-4
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ def announcement_approved_hook(request, obj, req):
8484

8585

8686
@login_required
87+
@deny_restricted
8788
def request_announcement_view(request):
8889
"""The request announcement page."""
8990
if request.method == "POST":
@@ -142,7 +143,8 @@ def post_club_announcement_view(request):
142143

143144
obj.save()
144145

145-
return redirect("index")
146+
messages.success(request, "Successfully posted announcement.")
147+
return redirect("club_announcements")
146148
else:
147149
messages.error(request, "Error adding announcement")
148150
else:
@@ -151,11 +153,13 @@ def post_club_announcement_view(request):
151153

152154

153155
@login_required
156+
@deny_restricted
154157
def request_announcement_success_view(request):
155158
return render(request, "announcements/success.html", {"type": "request"})
156159

157160

158161
@login_required
162+
@deny_restricted
159163
def request_announcement_success_self_view(request):
160164
return render(request, "announcements/success.html", {"type": "request", "self": True})
161165

@@ -276,11 +280,12 @@ def admin_approve_announcement_view(request, req_id):
276280
@announcements_admin_required
277281
@deny_restricted
278282
def admin_request_status_view(request):
279-
all_waiting = AnnouncementRequest.objects.filter(posted=None, rejected=False).this_year()
283+
prefetch_fields = ["user", "teachers_requested", "teachers_approved", "posted", "posted_by", "rejected_by"]
284+
all_waiting = AnnouncementRequest.objects.filter(posted=None, rejected=False).this_year().prefetch_related(*prefetch_fields)
280285
awaiting_teacher = all_waiting.filter(teachers_approved__isnull=True)
281286
awaiting_approval = all_waiting.filter(teachers_approved__isnull=False)
282-
approved = AnnouncementRequest.objects.exclude(posted=None).this_year()
283-
rejected = AnnouncementRequest.objects.filter(rejected=True).this_year()
287+
approved = AnnouncementRequest.objects.exclude(posted=None).this_year().prefetch_related(*prefetch_fields)
288+
rejected = AnnouncementRequest.objects.filter(rejected=True).this_year().prefetch_related(*prefetch_fields)
284289

285290
context = {"awaiting_teacher": awaiting_teacher, "awaiting_approval": awaiting_approval, "approved": approved, "rejected": rejected}
286291

0 commit comments

Comments
 (0)