我需要创建一个与给定规范一致的棉花糖架构,在该规范中我无法更改键名。一键是Python中的保留关键字“ from”。
class TemporalExtentSchema(Schema):
from = fields.String(required=True)
to = fields.String(required=True)
这当然是Python所不允许的,因此我需要编写如下内容:
class TemporalExtentSchema(Schema):
t_from = fields.String(required=True)
to = fields.String(required=True)
我想拥有的是:
{
"from": "2018-01-01",
"to": "2018-01-10"
}
序列化时是否可以将实例属性映射到另一个键(t_from-> from)?
答案 0 :(得分:0)
为此,您需要覆盖序列化程序类的 init 方法。 我以为您正在使用ModelSerializer,这就是解决问题的方法,
class TemporalExtentSchemaSerializer(serializers.ModelSerializer):
class Meta:
model = TemporalExtentSchema
fields = ('to', 't_from')
def __init__(self, *args, **kwargs):
fields = kwargs.pop('data', None)
fields['t_from'] = fields['from']
del fields['from']
kwargs.update({'data':fields})
super(TemporalExtentSchemaSerializer, self).__init__(*args, **kwargs)
要使用此功能,只需执行以下操作
d = {
"from": "2018-01-01",
"to": "2018-01-10"
}
s = TemporalExtentSchemaSerializer(data=d)
if s.is_valid():
s.save()
这是实现它的方式,我希望您理解它的简单代码
快乐编码
答案 1 :(得分:0)
使用dump_to
/ load_from
(棉花糖2)或data_key
(棉花糖3):
class TemporalExtentSchema(Schema):
# Marshmallow 2
t_from = fields.String(required=True, dump_to='from', load_from='from')
# Marshmallow 3
t_from = fields.String(required=True, data_key='from')
to = fields.String(required=True)