首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止沼气石部分倾倒?

如何防止沼气石部分倾倒?
EN

Stack Overflow用户
提问于 2021-07-14 15:06:39
回答 1查看 195关注 0票数 0

我有下一个数据类和模式:

代码语言:javascript
复制
@dataclass
class Period:
    id: int
    year: int
    month: EMonth
    closed_at: Optional[datetime]

PeriodSchema = marshmallow_dataclass.class_schema(Period)

问题是,在默认情况下,Marshmallow允许部分倾销:

代码语言:javascript
复制
PeriodSchema().dumps(None) # '{"closed_at": null}'

我需要Marshmallow抛出我的实体,或者返回{}''null,简而言之,这是一个默认值。

如何修复默认行为?

EN

回答 1

Stack Overflow用户

发布于 2021-07-14 17:20:37

我认为这不是最好的解决办法,但它帮了我的忙:

代码语言:javascript
复制
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)

简而言之,我们只是覆盖使用过的方法并检查空字典和字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68380588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档