From 3c269b1db1fdd5dc1305901e56d5602dceac6b34 Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Sat, 11 Mar 2017 00:06:09 +0100
Subject: [PATCH] Reduce submission detailview db load by 1/3

---
 submissions/models.py                          | 2 +-
 submissions/templatetags/submissions_extras.py | 2 +-
 submissions/views.py                           | 7 +++++--
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/submissions/models.py b/submissions/models.py
index 8ca56af4a..7aea9adab 100644
--- a/submissions/models.py
+++ b/submissions/models.py
@@ -634,7 +634,7 @@ class Report(models.Model):
     # -3: rejected (not useful)
     # -4: rejected (not academic in style)
     status = models.SmallIntegerField(default=0)
-    submission = models.ForeignKey(Submission, on_delete=models.CASCADE)
+    submission = models.ForeignKey(Submission, related_name='reports', on_delete=models.CASCADE)
     vetted_by = models.ForeignKey(Contributor, related_name="report_vetted_by",
                                   blank=True, null=True, on_delete=models.CASCADE)
     # `invited' filled from RefereeInvitation objects at moment of report submission
diff --git a/submissions/templatetags/submissions_extras.py b/submissions/templatetags/submissions_extras.py
index 7460a3c30..b2b785c03 100644
--- a/submissions/templatetags/submissions_extras.py
+++ b/submissions/templatetags/submissions_extras.py
@@ -73,7 +73,7 @@ def required_actions(submission):
         todo.append('The refereeing deadline has passed. Please either extend it, '
                     'or formulate your Editorial Recommendation if at least '
                     'one Report has been received.')
-    reports = submission.report_set.all()
+    reports = submission.reports.all()
     for report in reports:
         if report.status == 0:
             todo.append('The Report from %s has been delivered but is not yet vetted. '
diff --git a/submissions/views.py b/submissions/views.py
index 2681da5f9..f80cfbf10 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -271,7 +271,10 @@ def submission_detail_wo_vn_nr(request, arxiv_identifier_wo_vn_nr):
 
 
 def submission_detail(request, arxiv_identifier_w_vn_nr):
-    submission = get_object_or_404(Submission, arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
+    submission = Submission.objects.select_related(
+                    'editor_in_charge', 'publication__in_issue__in_volume__in_journal'
+                    ).prefetch_related('authors').get(
+                    arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
     try:
         is_author = request.user.contributor in submission.authors.all()
     except AttributeError:
@@ -288,7 +291,7 @@ def submission_detail(request, arxiv_identifier_w_vn_nr):
 
     form = CommentForm()
 
-    reports = submission.report_set.all()
+    reports = submission.reports.prefetch_related('reports')
     try:
         author_replies = Comment.objects.filter(submission=submission,
                                                 is_author_reply=True,
-- 
GitLab