{"title":"Unknown Pleasures","type":"vinyl","artist":{"_name":"Joy Division","genres":["rock","punk"],"members":4},"year":1979,"songs":[{"title":"Disorder","duration":"3:29"},{"title":"Day of the Lords","duration":"4:48","metadata":{"_section":{"type":"ID3v2","offset":0,"byteLength":2048},"header":{"majorVersion":3,"minorRevision":0,"flagsOctet":0,"unsynchronisationFlag":false,"extendedHeaderFlag":false,"experimentalIndicatorFlag":false,"size":2038}}}],"metadata":{"created_at":"2019-10-21T18:57:03+0100","updated_at":"2019-10-21T18:57:03+0100"}}
fromenumimportEnumfromdjango.core.exceptionsimportValidationErrorfromdjango.formsimportfieldsfromdjango_api_formsimportFieldList,FormField,FormFieldList,DictionaryField,EnumField,AnyField,FormclassAlbumType(Enum):CD='cd'VINYL='vinyl'classArtistForm(Form):classMeta:mapping={'_name':'name'}name=fields.CharField(required=True,max_length=100)genres=FieldList(field=fields.CharField(max_length=30))members=fields.IntegerField()classSongForm(Form):title=fields.CharField(required=True,max_length=100)duration=fields.DurationField(required=False)metadata=AnyField(required=False)classAlbumForm(Form):title=fields.CharField(max_length=100)year=fields.IntegerField()artist=FormField(form=ArtistForm)songs=FormFieldList(form=SongForm)type=EnumField(enum=AlbumType,required=True)metadata=DictionaryField(fields.DateTimeField())defclean_year(self):ifself.cleaned_data['year']==1992:raiseValidationError("Year 1992 is forbidden!",'forbidden-value')returnself.cleaned_data['year']defclean(self):if(self.cleaned_data['year']==1998)and(self.cleaned_data['artist']['name']=="Nirvana"):raiseValidationError("Sounds like a bullshit",code='time-traveling')returnself.cleaned_data"""Django view example"""defcreate_album(request):form=AlbumForm.create_from_request(request)ifnotform.is_valid():# Process your validation errorprint(form.errors)# Cleaned valid payloadpayload=form.cleaned_dataprint(payload)