87 lines
3.0 KiB
Python
87 lines
3.0 KiB
Python
"""Mixins for Events."""
|
|
from django.db.models import Q
|
|
from django.http import Http404
|
|
from django.shortcuts import get_object_or_404
|
|
from django.utils.translation import gettext as _
|
|
|
|
from . import models
|
|
|
|
|
|
# Ignore PyLintBear (R0903)
|
|
class EventArchiveMixin(object):
|
|
"""Adds an is_archive = True variable to the template context."""
|
|
context_object_name = 'event_list'
|
|
date_field = 'start'
|
|
make_object_list = True
|
|
model = models.Event
|
|
paginate_by = 15
|
|
template_name = 'events/event_archive.html'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
"""Add is_archive to the context and set it to true.
|
|
|
|
:return: TemplateContext object"""
|
|
context = super(EventArchiveMixin, self).get_context_data(**kwargs)
|
|
context['is_archive'] = True
|
|
return context
|
|
|
|
|
|
# Ignore PyLintBear (R0903)
|
|
class EventDetailMixin(object):
|
|
"""A very simple Mixin to add the related event to the template context."""
|
|
event = None
|
|
|
|
def get_context_data(self, **kwargs):
|
|
"""Add self.event or the related event of self.object to the template
|
|
context.
|
|
|
|
:return: TemplateContext object"""
|
|
context = super(EventDetailMixin, self).get_context_data(**kwargs)
|
|
if getattr(self, 'event'):
|
|
context['event'] = self.event
|
|
elif isinstance(getattr(self, 'object'), models.Event):
|
|
context['event'] = self.object
|
|
elif getattr(getattr(self, 'object'), 'event'):
|
|
context['event'] = self.object.event
|
|
else:
|
|
raise ImproperlyConfigured("No Event in Context!")
|
|
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
|
|
"""
|
|
if self.model == models.Event:
|
|
self.event = get_object_or_404(models.Event, pk=self.kwargs['pk'])
|
|
queryset = self.model._default_manager.all()
|
|
elif self.kwargs.get('event'):
|
|
self.event = get_object_or_404(
|
|
models.Event,
|
|
pk=self.kwargs['event'])
|
|
queryset = self.model.objects.filter(event=self.event)
|
|
elif self.model:
|
|
queryset = self.model._default_manager.all()
|
|
else:
|
|
raise ImproperlyConfigured(
|
|
"%(cls)s is missing a QuerySet. Define "
|
|
"%(cls)s.model, %(cls)s.queryset, or override "
|
|
"%(cls)s.get_queryset()." % {
|
|
'cls': self.__class__.__name__
|
|
})
|
|
return queryset.prefetch_related()
|
|
|
|
|
|
class EventPhotoMixin(EventDetailMixin):
|
|
|
|
def get_queryset(self):
|
|
try:
|
|
self.event = models.Event.objects.get(id=self.kwargs['event'])
|
|
return models.Photo.objects.filter(
|
|
Q(event=self.event) |
|
|
Q(event__event_series=self.event)
|
|
)
|
|
except models.Event.DoesNotExist:
|
|
raise Http404(_('Event does not exist'))
|