Add validation to the track admin

This commit is contained in:
2022-04-05 19:21:20 +02:00
parent 768def6630
commit 1966bcc371

View File

@@ -1,3 +1,5 @@
from typing import Iterable
from django import forms from django import forms
from django.contrib import admin from django.contrib import admin
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
@@ -17,6 +19,21 @@ class TranscodingsForm(forms.ModelForm):
self.add_error('upload', validation_error) self.add_error('upload', validation_error)
return cleaned_data 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): class TranscodingsInline(admin.StackedInline):
model = models.Transcoding model = models.Transcoding
form = TranscodingsForm form = TranscodingsForm
@@ -25,7 +42,7 @@ class TranscodingsInline(admin.StackedInline):
class TracksInline(admin.StackedInline): class TracksInline(admin.StackedInline):
model = models.Track model = models.Track
#form = TranscodingsForm formset = TrackInlineFormset
fields = ('default', 'kind', 'lang', 'label', 'upload') fields = ('default', 'kind', 'lang', 'label', 'upload')
extra = 0 extra = 0