2017-11-21 23 views
0

私はSQLAlchemyのモデルとしてこれらのクラスを持っています。私は正常に私のユーザーオブジェクトをエンコードするためにmarshmallowを取得しましたが、ネストされたリンクオブジェクトをエンコードしません。私のSQLAlchemyクエリは、正常に動作しているfk上のリンクテーブルの結合を行っています。私はNestedSchemaに何が間違っているのか、それがなぜエンコードされないのかを理解するのに苦労しています!マシュマロのネストされたスキーマの印刷

class User(Base): 
    __tablename__ = 'user' 

    id = Column('id', Integer, primary_key=True) 
    username = Column('username', String(255), unique=True) 
    link = relationship("Link", backref='user', lazy='joined') 


class Link(Base): 
    __tablename__ = 'link' 

    id = Column('id', Integer, primary_key=True) 
    name = Column('name', String(255)) 
    user_id = Column('user_id', Integer, ForeignKey("user.id"), nullable=True) 

class LinkSchema(Schema): 
    name = fields.Str() 
    user = fields.Nested('UserSchema') 


class UserSchema(Schema): 
    username = fields.Str() 
    links = fields.Nested('LinkSchema') 

私はこのように見えるデータベースに照会する機能を持っています。これにより、ユーザーとリンクが適切に返されます。

def get_user(user_id): 
    session = get_session() 
    try: 
     user = session.query(User).filter(User.id == user_id) 
    except exc.SQLAlchemyError: 
     return False 
    return user 

これは私が実行しているものです。私は適切に自分のuserinfoを得ることができましたが、Marshmallowはリンク部分をエンコードしていません。私はそれが印刷link.name [0]のためにそこにあることを知っています。私は何度も文書を見てきましたが、何がうまくいかないのか分かりません。どんなヒントも大歓迎です。

@app.route('/api/user_info/) 
def get_user_info(): 
    user = get_user(user_id) 
    for u in user: 
     print (u.link[0].name) #this prints the link name so I know its there 
    schema = UserSchema(strict=True, many=True) 
    result = schema.dumps(user) 
    pprint(result.data, indent=2) 
    return result.data 

これは返されるjsonです。リンクはありません!理由を理解できません。私は簡潔さのためにたくさんの欄を残しました。

[{"username": "erick", "role": 1}] 

答えて

0

はイライラの多くの時間後、私は、ネストされたUserSchemaの「リンク」と=多くの真であることを「リンク」を必要としていました。

関連する問題