From d1d5a4aca706aaa058921f29dd06a879f90f24ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org>
Date: Thu, 10 Feb 2022 20:25:25 +0100
Subject: [PATCH] Add some select/prefetch_related to optimiz db queries

---
 scipost_django/scipost/views.py | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/scipost_django/scipost/views.py b/scipost_django/scipost/views.py
index a6c078933..a75fb53fc 100644
--- a/scipost_django/scipost/views.py
+++ b/scipost_django/scipost/views.py
@@ -169,8 +169,8 @@ def index(request):
         request.session['session_acad_field_slug'] = request.GET['field']
     context = {
         'news_items': NewsItem.objects.homepage().order_by('-date')[:3],
-        'publications': Publication.objects.published().order_by('-publication_date',
-                                                                 '-paper_nr')[:3],
+        'publications': Publication.objects.published(
+        ).order_by('-publication_date', '-paper_nr')[:3],
         'load_header_forms': request.GET.get('tab', None) != None
     }
     return render(request, 'scipost/portal/portal.html', context)
@@ -185,7 +185,12 @@ def portal_hx_home(request):
     context = {
         'news_items': news_items,
         'publications': Publication.objects.published().order_by(
-            '-publication_date', '-paper_nr')[:3],
+            '-publication_date', '-paper_nr'
+        ).prefetch_related(
+            'in_issue__in_journal',
+            'specialties',
+            'collection_set__series'
+        )[:3],
     }
     return render(request, 'scipost/portal/_hx_home.html', context)
 
@@ -217,6 +222,15 @@ def portal_hx_publications_page(request):
             publications = publications.filter(acad_field__slug=session_acad_field_slug)
             if session_specialty_slug:
                 publications = publications.filter(specialties__slug=session_specialty_slug)
+    publications = publications.select_related(
+        'acad_field'
+    ).prefetch_related(
+        'in_journal',
+        'in_issue__in_journal',
+        'in_issue__in_volume__in_journal',
+        'specialties',
+        'collection_set__series'
+    )
     paginator = Paginator(publications, 10)
     page_nr = request.GET.get('page')
     page_obj = paginator.get_page(page_nr)
@@ -256,6 +270,14 @@ def portal_hx_submissions_page(request):
             submissions = submissions.filter(acad_field__slug=session_acad_field_slug)
             if session_specialty_slug:
                 submissions = submissions.filter(specialties__slug=session_specialty_slug)
+    submissions = submissions.select_related(
+        'preprint',
+        'acad_field',
+        'submitted_to',
+    ).prefetch_related(
+        'specialties',
+        'publication',
+    )
     paginator = Paginator(submissions, 10)
     page_nr = request.GET.get('page')
     page_obj = paginator.get_page(page_nr)
-- 
GitLab