2016-04-18 95 views
3

フラスコの拡張機能を使用していて、ModelSchemaクラスのloadメソッドを使用しようとしているmarshmallow-sqlalchemyを使用しています。marshmallow-sqlalchemyで入れ子になったオブジェクトでloadを使用する方法

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' object has no attribute 'query'を 私はこのような何かを持っています。

私は間違っていますか?

答えて

4

私はあなたのBaseSchemaのメタクラスが適切に継承されていないと思う。

この

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

参考に、この

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

変更:https://marshmallow-sqlalchemy.readthedocs.io/en/latest/recipes.html(ベーススキーマIの一例)

+1

そうです。ありがとう。 –

関連する問題