forked from rc/aircox
work on lists filters + nav items
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
from collections import OrderedDict
|
||||
import datetime
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic import ListView
|
||||
|
||||
from ..models import Diffusion, Episode, Program, StaticPage, Sound
|
||||
@ -29,6 +30,17 @@ class EpisodeListView(PageListView):
|
||||
parent_model = Program
|
||||
attach_to_value = StaticPage.ATTACH_TO_EPISODES
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
if self.filters and 'podcasts' in self.filters:
|
||||
qs = qs.filter(sound__is_public=True)
|
||||
return qs
|
||||
|
||||
def get_filters(self):
|
||||
return super().get_filters() + (
|
||||
(_('Podcasts'), 'podcasts', tuple()),
|
||||
)
|
||||
|
||||
|
||||
class DiffusionListView(GetDateMixin, AttachedToMixin, BaseView, ListView):
|
||||
""" View for timetables """
|
||||
|
@ -76,9 +76,11 @@ class PageListView(BasePageListView):
|
||||
template_name = None
|
||||
has_filters = True
|
||||
categories = None
|
||||
filters = None
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
self.categories = set(self.request.GET.getlist('categories'))
|
||||
self.filters = set(self.request.GET.getlist('filters'))
|
||||
return super().get(*args, **kwargs)
|
||||
|
||||
def get_template_names(self):
|
||||
@ -94,16 +96,25 @@ class PageListView(BasePageListView):
|
||||
qs = qs.filter(category__slug__in=self.categories)
|
||||
return qs
|
||||
|
||||
def get_categories_queryset(self):
|
||||
# TODO: use generic reverse field lookup
|
||||
def get_filters(self):
|
||||
categories = self.model.objects.published() \
|
||||
.filter(category__isnull=False) \
|
||||
.values_list('category', flat=True)
|
||||
return Category.objects.filter(id__in=categories)
|
||||
categories = [ (c.title, c.slug, c.slug in self.categories)
|
||||
for c in Category.objects.filter(id__in=categories) ]
|
||||
return (
|
||||
(_('Categories'), 'categories', categories),
|
||||
)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
kwargs.setdefault('filter_categories', self.get_categories_queryset())
|
||||
kwargs.setdefault('categories', self.categories)
|
||||
if not 'filters' in kwargs:
|
||||
filters = self.get_filters()
|
||||
for label, fieldName, choices in filters:
|
||||
if choices:
|
||||
kwargs['filters'] = filters
|
||||
break;
|
||||
else:
|
||||
kwargs['filters'] = tuple()
|
||||
return super().get_context_data(**kwargs)
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user