나는이 같은 JSON 직렬화하려고에 대한 사용자 정의 to_internal_value 내에서 실행 필드 검증 : 공백 필드가있는 시리얼을 작성장고 REST - 시리얼
{
"Some URL": "https://helloworld.com/",
"Some Integer": 12
"Some Dictionary": {
"Nested Array": [...]
"Nested Dictionary": {...}
}
}
은 허용되지 않습니다 (때문에 파이썬 변수의 과정) 그래서 BaseSerializer를 하위 클래스로 만들려고합니다.
class MyNestedSerializer(serializers.BaseSerializer):
def to_internal_value(self, data):
nested_array = data.get('Nested Array')
nested_dictionary = data.get('Nested Dictionary')
# Validation
....
....
return {
'Nested Array': nested_array,
'Nested Dictionary': nested_dictionary
}
def to_representation(self, instance):
return {
'Nested Array': instance['Nested Array'],
'Nested Dictionary': instance['Nested Dictionary']
}
class MySerializer(serializers.BaseSerializer):
def to_internal_value(self, data):
some_url = data.get('Some URL')
some_integer = data.get('Some Integer')
some_dictionary = data.get('Some Dictionary')
# Validation
....
nested_serializer = MyNestedSerializer(data=some_dictionary)
nested_serializer.is_valid(raise_exception=True)
....
return {
'Some URL': some_url,
'Some Integer': some_integer,
'Some Dictionary': some_dictionary
}
def to_representation(self, instance):
return {
'Some URL': instance['Some URL']
'Some Integer': instance['Some Integer']
'Some Dictionary': instance['Some Dictionary']
}
지금 일반적으로,이 같은 시리얼 라이저 (안 BaseSerializer)의 필드 유형을 정의합니다 :
class BasicSerializer(serializers.Serializer):
some_integer = serializers.IntegerField(min_value=0)
some_dictionary = serializers.DictField(child=serializers.CharField())
및 현장 검증이 발생합니다. 내가 원하는 것은 내 유효성 검사기를 작성하는 대신 to_internal_value
의 구현 내에서이 유효성 검사기를 실행하는 것입니다. 이미 작성된 내용을 다시 작성하는 것은 의미가 없지만 BaseSerializer에서 기본 유효성 검사를 실행하는 방법을 파악할 수는 없습니다.
지연된 응답으로 인해 죄송합니다. 전자 메일 알림을받지 못했습니까? 어쨌든 당신의 대답은 제가 원했던 것을 성취하는데 도움이되었습니다. 나는 그것을 받아 들였다. – gdeamont
도움이되어 기뻤습니다. – e4c5