Add validation to the track admin
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user