From cd360d9ac727d4a090719c24dd2799e89acd380b Mon Sep 17 00:00:00 2001 From: bkfox Date: Tue, 22 Feb 2022 18:48:17 +0100 Subject: [PATCH] add episode filters --- aircox/filters.py | 10 ++++++++-- aircox/templates/aircox/base.html | 4 ++-- aircox/templates/aircox/page_list.html | 2 +- aircox/views/episode.py | 13 ++----------- aircox/views/mixins.py | 1 - 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/aircox/filters.py b/aircox/filters.py index 39fa212..7b66b12 100644 --- a/aircox/filters.py +++ b/aircox/filters.py @@ -19,8 +19,14 @@ class PageFilters(filters.FilterSet): class EpisodeFilters(PageFilters): + podcast = filters.BooleanFilter(method='podcast_filter', label=_('Podcast')) + class Meta: model = Episode - fields = { - } + fields = PageFilters.Meta.fields.copy() + + def podcast_filter(self, queryset, name, value): + if value: + return queryset.filter(sound__is_public=True).distinct() + return queryset.filter(sound__isnull=True) diff --git a/aircox/templates/aircox/base.html b/aircox/templates/aircox/base.html index 955e801..7412b83 100644 --- a/aircox/templates/aircox/base.html +++ b/aircox/templates/aircox/base.html @@ -57,6 +57,8 @@ Usefull context: {% endblock %} diff --git a/aircox/templates/aircox/page_list.html b/aircox/templates/aircox/page_list.html index 1d1945e..f23de90 100644 --- a/aircox/templates/aircox/page_list.html +++ b/aircox/templates/aircox/page_list.html @@ -5,7 +5,7 @@ {% block before_list %} {{ block.super }} -{% if view.has_filters %} +{% if view.has_filters and object_list %}
{% block filters %} diff --git a/aircox/views/episode.py b/aircox/views/episode.py index e3cbb1b..96ada74 100644 --- a/aircox/views/episode.py +++ b/aircox/views/episode.py @@ -4,6 +4,7 @@ import datetime from django.utils.translation import gettext_lazy as _ from django.views.generic import ListView +from ..filters import EpisodeFilters from ..models import Diffusion, Episode, Program, StaticPage, Sound from .base import BaseView from .program import ProgramPageDetailView @@ -25,22 +26,12 @@ class EpisodeDetailView(ProgramPageDetailView): class EpisodeListView(PageListView): model = Episode + filterset_class = EpisodeFilters item_template_name = 'aircox/widgets/episode_item.html' has_headline = True 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 """ diff --git a/aircox/views/mixins.py b/aircox/views/mixins.py index c74235e..ad94155 100644 --- a/aircox/views/mixins.py +++ b/aircox/views/mixins.py @@ -107,4 +107,3 @@ class FiltersMixin: kwargs['get_params'] = params.pop('page', True) and params return super().get_context_data(**kwargs) -