如何在marshmallow-sqlalchemy中使用嵌套对象加载

我正在使用带有烧瓶扩展的marshmallow-sqlalchemy并尝试使用我的ModelSchema类的加载方法.
我有这样的事情:

db = SQLAlchemy()
ma = Marshmallow()

#I'm using Application Factorie
def create_app():
    ...
    db.init_app(app)
    ma.init_app(app)
    ...
    return app


class BaseSchema(ma.ModelSchema):    
    class Meta:
        sqla_session = db.session  

class Parent(db.Model):    
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(45), nullable=False)
    child_id = db.Column(db.Integer, db.ForeignKey("child.id"), nullable=False)
    child = db.relationship("Child")

class ParentSchema(BaseSchema):
    class Meta:
        model = Parent
    child = ma.Nested("ChildSchema")

class Child(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(25), nullable=False)

class ChildSchema(BaseSchema):
    class Meta:
        model = Child

整体工作完美,查询,插入……但是当我尝试在数据库中加载一个现有子项的新父对象时:new_parent = ParentSchema().load({‘name’:’Foo’,’child’: {‘id’:1,’name’:’Bar’}}}返回它AttributeError:’DummySession’对象没有属性’query’.

我究竟做错了什么?

最佳答案
我认为你的BaseSchema的Meta类没有被正确地继承.

改变这个

class ParentSchema(BaseSchema):
    class Meta:
        model = Parent

对此

class ParentSchema(BaseSchema):
    class Meta(BaseSchema.Meta):
        model = Parent

参考:https://marshmallow-sqlalchemy.readthedocs.io/en/latest/recipes.html(基础架构I示例)

转载注明原文:如何在marshmallow-sqlalchemy中使用嵌套对象加载 - 代码日志