2
私はこのようなJSONシリアライズしようとしているため、カスタムto_internal_value内から実行フィールド検証:スペースでフィールドを持つシリアライザを書くジャンゴREST - シリアライザ
{
"Some URL": "https://helloworld.com/",
"Some Integer": 12
"Some Dictionary": {
"Nested Array": [...]
"Nested Dictionary": {...}
}
}
は許可されていません(理由はPythonの変数のコース) 、私は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