Skip to content
Snippets Groups Projects
Commit e7c7ace2 authored by Todd Dembrey's avatar Todd Dembrey
Browse files

Improve the performance of the table

parent 8ebb0a67
No related branches found
No related tags found
No related merge requests found
......@@ -36,7 +36,7 @@ class SubmissionsTable(tables.Table):
phase = tables.Column(verbose_name="Status", order_by=('status',))
stage = tables.Column(verbose_name="Type", order_by=('status',))
page = tables.Column(verbose_name="Fund")
comments = tables.Column(accessor='activities.comments.all', verbose_name="Comments")
comments = tables.Column(accessor='comment_count', verbose_name="Comments")
last_update = tables.DateColumn(accessor="last_update", verbose_name="Last updated")
class Meta:
......@@ -57,10 +57,6 @@ class SubmissionsTable(tables.Table):
def render_phase(self, value):
return format_html('<span>{}</span>', value)
def render_comments(self, value):
request = self.context['request']
return str(value.visible_to(request.user).count())
def order_last_update(self, qs, desc):
update_order = getattr(F('last_update'), 'desc' if desc else 'asc')(nulls_last=True)
......
......@@ -4,12 +4,12 @@
<tr class="reviews-summary__tr">
<td class="reviews-summary__td">
{% if record.stage.has_external_review %}
{{ record.reviewers.count }}
{{ record.review_count|default:'0' }}
{% else %}
{{ record.reviewers.staff.count }}
{{ record.review_staff_count|default:'0' }}
{% endif %}
</td>
<td class="reviews-summary__td">{{ record.reviews.submitted.count }}</td>
<td class="reviews-summary__td">{{ record.reviews.submitted.recommendation|traffic_light }}</td>
<td class="reviews-summary__td">{{ record.review_submitted_count|default:'0' }}</td>
<td class="reviews-summary__td">{{ record.review_reccomendation|traffic_light }}</td>
</tr>
</table>
......@@ -3,7 +3,7 @@ from copy import copy
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.core.exceptions import PermissionDenied
from django.db.models import OuterRef, Subquery
from django.db.models import Count, IntegerField, OuterRef, Subquery, Sum
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.urls import reverse_lazy
......@@ -46,10 +46,42 @@ class SubmissionListView(AllActivityContextMixin, SingleTableMixin, FilterView):
activities = model.activities.field.model
latest_activity = activities.objects.filter(submission=OuterRef('id')).select_related('user')
comments = activities.comments.filter(submission=OuterRef('id')).visible_to(self.request.user)
reviews = model.reviews.field.model.objects.filter(submission=OuterRef('id'))
return self.filterset_class._meta.model.objects.current().select_related('previous').annotate(
last_user_update=Subquery(latest_activity[:1].values('user__full_name')),
last_update=Subquery(latest_activity.values('timestamp')[:1]),
comment_count=Subquery(
comments.values('submission').order_by().annotate(count=Count('pk')).values('count'),
output_field=IntegerField(),
),
review_count=Subquery(
reviews.values('submission').annotate(count=Count('pk')).values('count'),
output_field=IntegerField(),
),
review_staff_count=Subquery(
reviews.by_staff().values('submission').annotate(count=Count('pk')).values('count'),
output_field=IntegerField(),
),
review_submitted_count=Subquery(
reviews.submitted().values('submission').annotate(count=Count('pk')).values('count'),
output_field=IntegerField(),
),
review_reccomendation=Subquery(
reviews.submitted().values('submission').annotate(calc_recommendation=Sum('recommendation') / Count('recommendation')).values('calc_recommendation'),
output_field=IntegerField(),
),
).prefetch_related(
'reviews__author'
).select_related(
'page',
'round',
'lead',
'user',
'previous__page',
'previous__round',
)
def get_context_data(self, **kwargs):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment