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: for state in approved_states:
state.copy(update_attrs={'page_revision': revision}) 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): def all_tasks_with_status(self):
""" """
Returns a list of Task objects that are linked with this workflow state's 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 This is different to querying TaskState as it also returns tasks that haven't
been started yet (so won't have a TaskState). 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( tasks = list(
self.workflow.tasks.annotate( self.workflow.tasks.annotate(
status=Subquery( status=Subquery(
TaskState.objects.filter( TaskState.objects.filter(
task_id=OuterRef('id'), task_id=OuterRef('id'),
workflow_state_id=self.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') ).values('status')
), ),
) )