我认为这不是最好的解决方案,但它对我很有帮助:
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)
简而言之,我们只是覆盖使用过的方法并检查空字典和字符串。