【发布时间】:2017-03-10 17:30:26
【问题描述】:
我正在尝试像这样序列化 JSON:
{
"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 中运行基本验证。
【问题讨论】:
-
抱歉延迟回复,我想我没有收到电子邮件通知?无论如何,您的回答帮助我实现了我想要的。我接受了。
-
很高兴能帮上忙。
标签: json django validation serialization django-rest-framework