我正在尝试建立一个棉花糖方案来加载和转储数据。除了一个领域,我一切都OK。
对于加载数据,其类型为Decimal。我以前是这样使用的。现在,我想使用这种模式进行转储,并使用棉花糖说:TypeError: Object of type Decimal is not JSON serializable
。好的,我明白了。我将类型更改为Float。然后,我的旧代码开始尝试将字段保存到数据库时出现异常(需要十进制)。我不想更改旧版代码,因此我在棉花糖文档中寻找任何解决方案,并找到了load_only和dump_only参数。看来这些就是我想要的,但这是我的问题-我想将它们设置在同一字段。所以我想知道是否可以同时定义两个字段并尝试这样做:
class PaymentSchema(Schema):
money = fields.Decimal(load_only=True)
money = fields.Float(dump_only=True)
可怜的我,我被期望能创造奇迹。实际上我在想这会引发异常,但事实并非如此。它只是跳过第二个定义(或者我不能说两个)。我得到的是根本没有这个领域。
所以我尝试了另一种解决方案。我为转储创建了另一个模式,并从以前的模式继承了它:
class PaymentSchema(Schema):
money = fields.Decimal(load_only=True)
class PaymentDumpSchema(PaymentSchema):
money = fields.Float(dump_only=True)
有效。但是我想知道是否还有其他本地的“棉花糖方式”解决方案。我一直在浏览文档,但找不到任何东西。 Google也没有帮助。
答案 0 :(得分:0)
您可以在此装饰器中使用棉花糖装饰器@pre_load,您可以执行任何所需操作并返回您的类型
from marshmallow import pre_load
像这样import,在此您将获得有效载荷并根据需要更改类型。