私は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}]