add a latest method to query the latest x events

This commit is contained in:
2017-11-23 14:15:12 +01:00
parent 5ad628f33a
commit bf12060c3b
8 changed files with 81 additions and 77 deletions

View File

@@ -31,6 +31,10 @@ class EventManager(models.Manager):
"""Returns all past events."""
return self.filter(start__lt=now())
def latest(self, limit=None):
result = self.filter(start__lt=now()).order_by('-start', '-end')
return result[0:limit] if limit else result
def upcoming(self, limit=None):
"""Returns the next 'limit' upcoming events.

View File

@@ -1,4 +1,6 @@
"""Mixins for Events."""
from django.http import Http404
from . import models
@@ -9,7 +11,6 @@ class EventArchiveMixin(object):
date_field = 'start'
make_object_list = True
model = models.Event
ordering = ('start', 'end')
paginate_by = 15
template_name = 'events/event_archive.html'
@@ -40,3 +41,16 @@ class EventDetailMixin(object):
elif hasattr(self, 'object') and hasattr(self.object, 'event'):
context['event'] = self.object.event
return context
def get_queryset(self):
"""set event attribute from the URL kwarg event and
load all related objects from the set model.
:return: a django QuerySets
"""
try:
self.event = models.Event.objects.get(pk=self.kwargs['event'])
queryset = self.model.objects.filter(event=self.event)
except models.Event.DoesNotExist:
raise Http404(_('Event does not exist'))
return queryset.prefetch_related()

View File

@@ -30,7 +30,6 @@ class DeleteEventPhoto(PermissionRequiredMixin, mixins.EventDetailMixin,
class EventArchiveIndex(mixins.EventArchiveMixin, generic.ArchiveIndexView):
"""Index of the event archive, displays the upcoming events first."""
allow_empty = True
ordering = ('-start', '-end')
class EventArchiveMonth(mixins.EventArchiveMixin, generic.MonthArchiveView):
@@ -73,7 +72,7 @@ class EventForm(PermissionRequiredMixin, mixins.EventDetailMixin,
if self.kwargs.get('pk') else models.Event()
class EventGallery(mixins.EventDetailMixin, generic.ListView):
class EventGallery(generic.ListView):
"""Display a overview of all event photo albums."""
template_name = 'events/photo_gallery.html'
queryset = models.Event.objects.filter(