aircox-radiocampus/aircox/forms/episode.py

45 lines
1.1 KiB
Python

from django import forms
from django.forms.models import modelformset_factory
from aircox import models
from .page import ChildPageForm
__all__ = ("EpisodeForm", "EpisodeSoundFormSet")
class EpisodeForm(ChildPageForm):
class Meta:
model = models.Episode
fields = ChildPageForm.Meta.fields
class EpisodeSoundForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if "instance" in kwargs:
"""Limit available sounds."""
episode_sounds = kwargs["instance"].episode.episodesound_set.all()
self.fields["sound"].queryset = models.Sound.objects.filter(id__in=[x.sound.id for x in episode_sounds])
EpisodeSoundFormSet = modelformset_factory(
models.EpisodeSound,
form=EpisodeSoundForm,
fields=(
"position",
"episode",
"sound",
"broadcast",
),
widgets={
"broadcast": forms.CheckboxInput(),
"episode": forms.HiddenInput(),
# "sound": forms.HiddenInput(),
"position": forms.HiddenInput(),
},
can_delete=True,
extra=0,
)
"""Formset used in EpisodeUpdateView."""