2017-11-21 13 views
0

SQLAlchemy를 사용하는 모델로 이러한 클래스가 있습니다. 성공적으로 marshmallow를 사용하여 내 사용자 객체를 인코딩했지만 중첩 링크 객체는 인코딩하지 않습니다. 내 SQLAlchemy 쿼리가 올바르게 작동하는 fk의 링크 테이블 조인을 수행하고 있습니다. 내 NestedSchema가 잘못된 점을 알아내는 데 문제가 있으며 왜 인코딩하지 않을까요?Marshmallow에서 중첩 스키마 인쇄

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 

내 플라스크 경로에는 이것이 실행 중입니다. 제대로 사용자 정보를 얻을 수 있지만 마쉬멜로 우는 링크 부분을 인코딩하지 않습니다. 프린팅 링크 때문에 거기있는 걸 압니다. 이름 [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에서 '링크'와 = 많은 사실로 '링크'를 필요로했다.