diff --git a/opentech/public/home/models.py b/opentech/public/home/models.py index d6cfb5e6902fc5121f7dfeffc72d2cfd21dd89bc..f3a1045939dc1a5177ea39c4ce42cf7944867650 100644 --- a/opentech/public/home/models.py +++ b/opentech/public/home/models.py @@ -1,3 +1,4 @@ +import datetime from django.db import models from modelcluster.fields import ParentalKey @@ -105,7 +106,17 @@ class HomePage(BasePage): yield from self.pages_from_related(base_list) selected = list(base_list.values_list('page', flat=True)) extra_needed = self.NUM_RELATED - len(selected) - yield from page_type.objects.exclude(id__in=selected)[:extra_needed] + extra_qs = page_type.objects.exclude(id__in=selected)[:extra_needed] + yield from self.sorted_by_deadline(extra_qs) + + def sorted_by_deadline(self, qs): + def sort_by_deadline(value): + try: + return value.deadline or datetime.date.max + except AttributeError: + return datetime.date.max + + yield from sorted(qs, key=sort_by_deadline) def pages_from_related(self, related): for related in related.all():