Django rest framework add custom validator to many=True serializer class -


below serializer class has 1 many=true field itemserializer

class dataserializer(serializers.serializer):     items = itemserializer(many=true) 

now want apply validation on field items, tried

items = itemserializer(many=true, validators=[my_custom_validator]) 

below validator(function based)

def my_custom_validator(value):     # check , validation , raise appropriate validation error 

but problem validator applied each item 1 one instead of whole list @ once.

so example want check length of items list , if exceed predefined length, should able raise error before executing validation on each item.

i've tried override to_internal_value got valueerror: many values unpack (expected 2)

def to_internal_value(self, data):     if len(data.get('items')) > 42:         raise serializers.validationerror('length shouldnt more 42')     return super(dataserializer, self).to_internal_value(data) 

note itemserializer can nested serializer itself, mean using serializer field , on. custom field_level method validation won't work here.

to run custom validation before content validation, should override to_internal_value method:

def to_internal_value(self, data):     my_custom_validator(data.get('items'))     return super(dataserializer, self).to_internal_value(data) 


otherwise, simple specify custom field-level validation adding .validate_<field_name> methods serializer subclass.

for example:

def validate_items(self, items):     if len(items) != 42:         raise validationerror('length should 42')     return items  

Comments

Popular posts from this blog

node.js - Node js - Trying to send POST request, but it is not loading javascript content -

javascript - Replicate keyboard event with html button -

javascript - Web audio api 5.1 surround example not working in firefox -