我正在使用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