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



我正在使用sqlalchemy-棉花糖用于创建模式,看起来很像这样:

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之后添加。

我遇到了这个确切的问题,并试图通过在我的模式定义中添加手动字段来解决它。这正在从模型自动生成的字段与我手动定义的字段之间产生碰撞。事实证明,如果您手动覆盖字段,则需要通过将其明确标记为从元类中排除,从而将它们排除在推理之外。这样的事情最终为我工作:

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

希望这可以节省某人的时间,以挖掘棉花糖sqlalchemy来源。

sqlalchemy-marshmallow提供了一些有关如何使用模型Chemas的示例,关于覆盖生成的字段的一个示例与您的需求相对应:

模型chema生成的任何字段都可以被覆盖。

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

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

相关内容

  • 没有找到相关文章

最新更新