42 lines
1.2 KiB
Python
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")
|