add episode filters

This commit is contained in:
bkfox 2022-02-22 18:48:17 +01:00
parent 849a14014c
commit cd360d9ac7
5 changed files with 13 additions and 17 deletions

View File

@ -19,8 +19,14 @@ class PageFilters(filters.FilterSet):
class EpisodeFilters(PageFilters): class EpisodeFilters(PageFilters):
podcast = filters.BooleanFilter(method='podcast_filter', label=_('Podcast'))
class Meta: class Meta:
model = Episode 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)

View File

@ -57,6 +57,8 @@ Usefull context:
{% endblock %} {% endblock %}
</div> </div>
<div class="navbar-end"> <div class="navbar-end">
{% block top-nav-tools %}
{% endblock %}
{% block top-nav-end %} {% block top-nav-end %}
<div class="navbar-item"> <div class="navbar-item">
<form action="{% url 'page-list' %}" method="GET"> <form action="{% url 'page-list' %}" method="GET">
@ -70,8 +72,6 @@ Usefull context:
</form> </form>
</div> </div>
{% endblock %} {% endblock %}
{% block top-nav-tools %}
{% endblock %}
</div> </div>
</div> </div>
</div> </div>

View File

@ -5,7 +5,7 @@
{% block before_list %} {% block before_list %}
{{ block.super }} {{ block.super }}
{% if view.has_filters %} {% if view.has_filters and object_list %}
<form method="GET" action="" class="media"> <form method="GET" action="" class="media">
<div class="media-content"> <div class="media-content">
{% block filters %} {% block filters %}

View File

@ -4,6 +4,7 @@ import datetime
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.views.generic import ListView from django.views.generic import ListView
from ..filters import EpisodeFilters
from ..models import Diffusion, Episode, Program, StaticPage, Sound from ..models import Diffusion, Episode, Program, StaticPage, Sound
from .base import BaseView from .base import BaseView
from .program import ProgramPageDetailView from .program import ProgramPageDetailView
@ -25,22 +26,12 @@ class EpisodeDetailView(ProgramPageDetailView):
class EpisodeListView(PageListView): class EpisodeListView(PageListView):
model = Episode model = Episode
filterset_class = EpisodeFilters
item_template_name = 'aircox/widgets/episode_item.html' item_template_name = 'aircox/widgets/episode_item.html'
has_headline = True has_headline = True
parent_model = Program parent_model = Program
attach_to_value = StaticPage.ATTACH_TO_EPISODES 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): class DiffusionListView(GetDateMixin, AttachedToMixin, BaseView, ListView):
""" View for timetables """ """ View for timetables """

View File

@ -107,4 +107,3 @@ class FiltersMixin:
kwargs['get_params'] = params.pop('page', True) and params kwargs['get_params'] = params.pop('page', True) and params
return super().get_context_data(**kwargs) return super().get_context_data(**kwargs)