From e962ad60043cdb2f94e9f90587133075d6eb8eb3 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Fri, 14 Feb 2020 10:59:39 +0000 Subject: [PATCH] Use latest revision that's relevant to the workflow --- wagtail/core/models.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/wagtail/core/models.py b/wagtail/core/models.py index 937420f47a..665dcc54e3 100644 --- a/wagtail/core/models.py +++ b/wagtail/core/models.py @@ -2844,6 +2844,12 @@ class WorkflowState(models.Model): for state in approved_states: state.copy(update_attrs={'page_revision': revision}) + def revisions(self): + return PageRevision.objects.filter( + page_id=self.page_id, + id__in=self.task_states.values_list('page_revision_id', flat=True) + ).defer('content_json') + def all_tasks_with_status(self): """ Returns a list of Task objects that are linked with this workflow state's @@ -2854,13 +2860,15 @@ class WorkflowState(models.Model): This is different to querying TaskState as it also returns tasks that haven't been started yet (so won't have a TaskState). """ + latest_revision_id = self.revisions().order_by('-created_at', '-id').values_list('id', flat=True).first() + tasks = list( self.workflow.tasks.annotate( status=Subquery( TaskState.objects.filter( task_id=OuterRef('id'), workflow_state_id=self.id, - page_revision_id=self.page.revisions.order_by('-created_at', '-id').values_list('id', flat=True).first() + page_revision_id=latest_revision_id ).values('status') ), )