episode-form: add tracks inline formset
This commit is contained in:
@ -1,10 +1,10 @@
|
||||
from django.contrib.auth.mixins import UserPassesTestMixin
|
||||
from django.forms.models import modelformset_factory
|
||||
from django.urls import reverse
|
||||
|
||||
|
||||
from aircox.forms import EpisodeForm
|
||||
from aircox.models import Episode, Program, StaticPage, Track
|
||||
from ..filters import EpisodeFilters
|
||||
from ..models import Episode, Program, StaticPage
|
||||
from .page import PageListView
|
||||
from .program import ProgramPageDetailView, BaseProgramMixin
|
||||
from .page import PageUpdateView
|
||||
@ -50,6 +50,7 @@ class PodcastListView(EpisodeListView):
|
||||
class EpisodeUpdateView(UserPassesTestMixin, BaseProgramMixin, PageUpdateView):
|
||||
model = Episode
|
||||
form_class = EpisodeForm
|
||||
template_name = "aircox/episode_form.html"
|
||||
|
||||
def get_sidebar_queryset(self):
|
||||
return super().get_sidebar_queryset().filter(parent=self.program)
|
||||
@ -60,3 +61,27 @@ class EpisodeUpdateView(UserPassesTestMixin, BaseProgramMixin, PageUpdateView):
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse("episode-detail", kwargs={"slug": self.get_object().slug})
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
obj = Episode.objects.get(pk=self.kwargs["pk"])
|
||||
return obj
|
||||
|
||||
def get_formset(self, *args, **kwargs):
|
||||
fields = ("position", "artist", "title", "tags", "album", "year", "info")
|
||||
TrackFormSet = modelformset_factory(Track, fields=fields, extra=0)
|
||||
return TrackFormSet(*args, **kwargs)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context["fields"] = ("position", "artist", "title", "tags", "album", "year", "info")
|
||||
context["formset"] = self.get_formset(queryset=Track.objects.filter(episode=self.object))
|
||||
return context
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
super().post(request, *args, **kwargs)
|
||||
formset = self.get_formset(request.POST)
|
||||
if formset.is_valid():
|
||||
formset.save()
|
||||
return super().form_valid(formset)
|
||||
else:
|
||||
return super().form_valid(formset) # form_invalid(formset)
|
||||
|
Reference in New Issue
Block a user