aircox/aircox/views/episode.py
2023-12-12 20:07:58 +01:00

42 lines
1.2 KiB
Python

from django.shortcuts import reverse
from ..filters import EpisodeFilters
from ..models import Episode, Program, StaticPage
from .page import PageListView
from .program import ProgramPageDetailView
__all__ = (
"EpisodeDetailView",
"EpisodeListView",
"PodcastListView",
)
class EpisodeDetailView(ProgramPageDetailView):
model = Episode
def get_context_data(self, **kwargs):
if "tracks" not in kwargs:
kwargs["tracks"] = self.object.track_set.order_by("position")
return super().get_context_data(**kwargs)
def get_related_queryset(self):
return (
self.get_queryset().parent(self.object.parent).exclude(pk=self.object.pk).published().order_by("-pub_date")
)
def get_related_url(self):
return reverse("episode-list", kwargs={"parent_slug": self.object.parent.slug})
class EpisodeListView(PageListView):
model = Episode
filterset_class = EpisodeFilters
parent_model = Program
attach_to_value = StaticPage.Target.EPISODES
class PodcastListView(EpisodeListView):
attach_to_value = StaticPage.Target.PODCASTS
queryset = Episode.objects.published().with_podcasts().order_by("-pub_date")