繁体   English   中英

如何使用 SqlAlchemy-Marshmallow 更改字段名称?

[英]How to change the name of fields using SqlAlchemy-Marshmallow?

我正在使用 SQLAlchemy - Marshmallow 创建模式,它大致如下所示:

class someModel(db.Model):
  y_x = db.Column(db.BigInteger, primary_key = True)

class someSchema(ma.ModelSchema):
  class Meta:
    model = someModel

我遇到的问题是我想使用的 JSON 对象具有属性 x, {"x": 1},而不是 y_x。 模式有没有办法识别这一点? 我知道在棉花糖中你可以做 y = fields.Integer(data_key="x") 但我不确定这是否适用于棉花糖烧瓶,以及你是否可以在 model = someModel 之后添加它。

我遇到了这个确切的问题,并试图通过向我的模式定义添加手动字段覆盖来修复它。 这在从模型自动生成的字段和我手动定义的字段之间创建了冲突。 事实证明,如果您手动覆盖字段,则需要通过将它们显式标记为从 Meta 类中排除来将它们从推理中排除。 这样的事情最终对我有用:

class FooSchema(ma.ModelSchema):
    id = fields.Integer(attribute="foo_id")
    class Meta:
       model = Foo
       exclude = ["foo_id"]

希望这可以节省一些时间来挖掘 Marshmallow-SQLAlchemy 源代码。

SqlAlchemy-Marshmallow 提供了一些关于如何使用 ModelSchemas 的示例,其中一个关于覆盖生成的字段符合您的需求:

ModelSchema 生成的任何字段都可以被覆盖。

例如,您可以简单地手动指定字段并使用field对象attribute参数

from marshmallow import fields

class someSchema(ma.ModelSchema):
    x = fields.Integer(attribute='y') # Or vice-versa
    class Meta:
        model = someModel

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM