diff --git a/videodinges/admin.py b/videodinges/admin.py index aee5583..8736f49 100644 --- a/videodinges/admin.py +++ b/videodinges/admin.py @@ -1,3 +1,5 @@ +from typing import Iterable + from django import forms from django.contrib import admin from django.core.exceptions import ValidationError @@ -17,6 +19,21 @@ class TranscodingsForm(forms.ModelForm): self.add_error('upload', validation_error) return cleaned_data +class TrackInlineFormset(forms.BaseInlineFormSet): + forms: Iterable[forms.ModelForm] + def clean(self): + cleaned_data = super().clean() + default_cnt = 0 + for form in self.forms: + try: + if form.cleaned_data['default'] is True: + default_cnt += 1 + except AttributeError: + pass + if default_cnt > 1: + form.add_error('default', ValidationError('Can set only one track as default')) + return cleaned_data + class TranscodingsInline(admin.StackedInline): model = models.Transcoding form = TranscodingsForm @@ -25,7 +42,7 @@ class TranscodingsInline(admin.StackedInline): class TracksInline(admin.StackedInline): model = models.Track - #form = TranscodingsForm + formset = TrackInlineFormset fields = ('default', 'kind', 'lang', 'label', 'upload') extra = 0