我有下一个数据类和模式:
@dataclass
class Period:
id: int
year: int
month: EMonth
closed_at: Optional[datetime]
PeriodSchema = marshmallow_dataclass.class_schema(Period)问题是,在默认情况下,Marshmallow允许部分倾销:
PeriodSchema().dumps(None) # '{"closed_at": null}'我需要Marshmallow抛出我的实体,或者返回{}、''或null,简而言之,这是一个默认值。
如何修复默认行为?
发布于 2021-07-14 17:20:37
我认为这不是最好的解决办法,但它帮了我的忙:
class BaseSchema(Schema):
def dump(self, obj: Any, *, many: Optional[bool] = None):
if obj is None:
return {}
return super().dump(obj, many=many)
def dumps(self, obj: Any, *args, many: Optional[bool] = None, **kwargs):
if obj is None:
return {}
return super().dumps(obj, *args, many=many, **kwargs)
def load(self, data: Union[Mapping[str, Any], Iterable[Mapping[str, Any]]], *, many: Optional[bool] = None,
partial: Optional[Union[bool, types.StrSequenceOrSet]] = None, unknown: Optional[str] = None):
if not data:
return None
return super().load(data, many=many, partial=partial, unknown=unknown)
def loads(self, json_data: str, *, many: Optional[bool] = None,
partial: Optional[Union[bool, types.StrSequenceOrSet]] = None,
unknown: Optional[str] = None, **kwargs):
if not json_data or json_data == '{}':
return None
return super().loads(json_data, many=many, partial=partial, unknown=unknown, **kwargs)
PeriodSchema = marshmallow_dataclass.class_schema(Period, base_schema=BaseSchema)简而言之,我们只是覆盖使用过的方法并检查空字典和字符串。
https://stackoverflow.com/questions/68380588
复制相似问题