2017-06-13 10 views
0

私はFlaskのMarshmallowを使用してOne-To-Manyリレーションシップモデルからデータをシリアル化しようとしています。私はMarshmallowとSQLAlchemyのドキュメントを読んでいましたが、それを動作させることはできませんでした。誰でも助けてくれますか?Flask-SQLAlchemy-Marshmallowネスティング

モデル:

class Category(db.Model): 
    __tablename__ = 'category_mn' 

    id = db.Column(db.Integer, primary_key=True, autoincrement=True) 
    name = db.Column(db.String(45)) 
    status = db.Column(db.Integer, server_default=db.FetchedValue()) 
    items = db.relationship('Items', backref='category', lazy='dynamic') 
    timestamp = db.Column(db.DateTime, server_default=db.FetchedValue()) 


class Items(db.Model): 
    __tablename__ = 'items_mn' 

    id = db.Column(db.Integer, primary_key=True, autoincrement=True) 
    name = db.Column(db.String(100)) 
    category_id = db.Column(db.Integer, db.ForeignKey('category_mn.id')) 
    timestamp = db.Column(db.DateTime, server_default=db.FetchedValue()) 

スキーマ:

class CatSchema(ma.ModelSchema): 
    class Meta: 
     model = Category 
     fields = ('id', 'name', 'status') 


class ItemSchema(ma.ModelSchema): 

    class Meta: 
     model = Items 
     fields = ('id', 'name') 
    category = ma.Nested(CatSchema, many=True) 

私はこのような出力を探しています:

[{'id':1, 'name':'Test', 'category':{'id':1, 'name':'Test Cat'}}] 

答えて

0

あなたには存在しないモデルを参照していますあなたのスキーマ。

それに加えて、Itemscategoryは(それが「1対多」関係の「1」側'S)反復可能ではないので、many=Trueパラメータは、エラーをスロー。

そしてcategoryItemSchemaためMetaクラスのfields属性に表示されますので、実際にシリアライズに表示されます。

それは次のようにする必要があります:もちろん

class CatSchema(ma.ModelSchema): 
    class Meta: 
    model = Category 
    fields = ('id', 'name', 'status') 


class ItemSchema(ma.ModelSchema): 

    class Meta: 
    model = Items 
    fields = ('id', 'name', 'category') 
    category = ma.Nested(CatSchema) 

modelはすでにモデルをマッピングするの世話をしているので、あなたは単に、全くのメタクラスでfields属性を含めることができませんでした。

関連する問題