Use latest revision that's relevant to the workflow

pull/6257/head
Karl Hobley 2020-02-14 10:59:39 +00:00 zatwierdzone przez Matt Westcott
rodzic fdaa99e4f9
commit e962ad6004
1 zmienionych plików z 9 dodań i 1 usunięć

Wyświetl plik

@ -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')
),
)