我可以使用 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
我有以下棉花糖架构:
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