我可以使用 python 棉花糖创建一个仅在反序列化时可用的派生字段吗?

Can I create a derived field using python marshmallow that only available when deserialized?

我有以下棉花糖架构:

class TimeSeriesSchema(Schema):

    timestamp = fields.DateTime(required=True)
    # year = fields.Method("get_year_from_timestamp")
    # year = fields.Function(lambda obj: obj.timestamp.year)
    latitude = fields.Number(allow_none=True)
    longitude = fields.Number(allow_none=True)


    # def get_year_from_timestamp(self, value):
    #     return obj.timestamp.year

有没有办法让 year 成为一个只有在 timeseries 被反序列化时才能访问的字段?这两种注释掉的方法不起作用,因为它们仅在序列化时公开 year

为了在代码中进行说明,我希望能够执行以下操作:

timeseries_data = {
    'timestamp': '2020-12-30T10:00:00',
    'latitude': None, 
    'longitude': None
}
schema = TimeSeriesSchema()
timeseries = schema.load(timeseries_data)

timeseries['year'] = 2020

你可以使用一个post加载方法来实现你想要的-

class TimeSeriesSchema(Schema):

    timestamp = fields.DateTime(required=True)
    latitude = fields.Number(allow_none=True)
    longitude = fields.Number(allow_none=True)

    @post_load
    def add_year(self, data, **kwargs):
        data["year"] = data["timestamp"].year
        return data

如果有人试图在转储或加载中指定“年份”,这不会添加任何处理,但允许您添加派生字段。您还可以使用它来序列化为年份 属性.

的自定义时间序列 class