From 4e3f06d3a6f87586313f8e00d687dff6279ff58b Mon Sep 17 00:00:00 2001 From: George Katsikas <giorgakis.katsikas@gmail.com> Date: Wed, 11 Dec 2024 18:26:36 +0100 Subject: [PATCH] optimize task queries with prefetch --- scipost_django/tasks/tasks/task_kinds.py | 31 +++++++++++++++--------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/scipost_django/tasks/tasks/task_kinds.py b/scipost_django/tasks/tasks/task_kinds.py index 3f6a40a8c..4302ad644 100644 --- a/scipost_django/tasks/tasks/task_kinds.py +++ b/scipost_django/tasks/tasks/task_kinds.py @@ -87,6 +87,7 @@ class ScheduleSubsidyPayments(TaskKind): Q(collective__isnull=True) & (Q(schedule_blank=True) | Q(schedule_complete=False)) ) + .prefetch_related("organization") ) @@ -131,6 +132,7 @@ class ScheduleSubsidyCollectivePayments(TaskKind): ), ) .filter(Q(schedule_complete=False)) + .prefetch_related("coordinator") ) @@ -173,6 +175,7 @@ class SendSubsidyInvoiceTask(TaskKind): Q(due_date__isnull=False) & (Q(status=SUBSIDY_PROMISED) | Q(status=SUBSIDY_UPTODATE)) ) + .prefetch_related("organization") ) @@ -216,6 +219,7 @@ class CheckSubsidyPaymentTask(TaskKind): ), ) .filter(Q(status=SUBSIDY_INVOICED)) + .prefetch_related("organization") ) @@ -283,9 +287,11 @@ class VetCommentTask(TaskKind): @classmethod def get_queryset(cls) -> "QuerySet": - return get_objects_for_user( - cls.user, "comments.can_vet_comments" - ).awaiting_vetting() + return ( + get_objects_for_user(cls.user, "comments.can_vet_comments") + .awaiting_vetting() + .prefetch_related("author__user") + ) class VetReportTask(TaskKind): @@ -320,19 +326,20 @@ class VetReportTask(TaskKind): if cls.user is None: return Report.objects.none() - if cls.user.has_perm("scipost.can_vet_submitted_reports"): - return Report.objects.awaiting_vetting() - - return Report.objects.filter( - submission__in=Submission.objects.in_pool_filter_for_eic( - cls.user, latest=False, historical=True + qs = Report.objects.all() + if not cls.user.has_perm("scipost.can_vet_submitted_reports"): + qs = qs.filter( + submission__in=Submission.objects.in_pool_filter_for_eic( + cls.user, latest=False, historical=True + ) ) - ).awaiting_vetting() + + return qs.awaiting_vetting().prefetch_related("submission") class SelectRefereeingCycleTask(TaskKind): name = "Select Refereeing Cycle" - task_title = "Select Refereeing Cycle for {object}" + task_title = "Select Refereeing Cycle for {object.title}" description = "Select the refereeing cycle for a submission." actions = [ lambda task: ViewAction( @@ -361,5 +368,5 @@ class SelectRefereeingCycleTask(TaskKind): return Submission.objects.filter( editor_in_charge=cls.user.contributor, - refereeing_cycle__isnull=True, + refereeing_cycle__isnull=False, ) -- GitLab