如何在序列化时将schema属性映射到另一个键?

2024-09-29 18:36:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个与给定规范一致的棉花糖模式,在该规范中我不能更改密钥名称。一个键是Python中保留的关键字“from”。在

class TemporalExtentSchema(Schema):
    from = fields.String(required=True)
    to = fields.String(required=True)

当然,这在Python中是不允许的,所以我需要写如下内容:

^{pr2}$

我想要的是:

{
    "from": "2018-01-01",
    "to": "2018-01-10"
}

序列化时是否可以将实例属性映射到另一个键(t_from->from)?在


Tags: tofrom规范名称truefieldsstringschema
2条回答

使用dump_to/load_from(棉花糖2)或{}(棉花糖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)

为了实现这一点,您需要重写序列化器类的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)

所以要使用这个,只需执行以下操作

^{pr2}$

这就是它的实现方式,我希望你能理解,它的纯代码

快乐的编码

相关问题 更多 >

    热门问题