2012-07-18 6 views
0

SQLAlchemy에 대한 설명서를 읽었으므로이 문제를 저의 머리로 생각할 수 없습니다. 다음 설정을 고려하십시오.자식 테이블의 결과 필터링

boardset_user_association_table = db.Table('boardset_user_association', 
    db.Column('user_id', db.Integer, db.ForeignKey('user.id')), 
    db.Column('boardset_id', db.Integer, db.ForeignKey('boardset.id')) 
) 

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(20), unique=True) 
    password = db.Column(db.String(30)) 
    boardSet = db.relationship('BoardSet', secondary=boardset_user_association_table, backref='user') 

    def __repr__(self): 
     return "<User('%s','%s')>" % (self.username, self.id) 

class BoardSet(db.Model): 
    __tablename__ = 'boardset' 
    id = db.Column(db.Integer, primary_key=True) 
    created = db.Column(db.DateTime) 
    boards = db.relationship('Board', backref='boardset', lazy='dynamic') 

    def __repr__(self): 
     return "<BoardSet('%s','%s')>" % (self.id, self.created) 

사용자 개체에서 항목 모음을 가져 오지만 실제 데이터에서 필터링 등을 수행하지 못합니다. 어떤 상황이

답변

1

잘 만든 필드에 값 User.boardSet에서 결과를 위해 당신은 어떤 경우에 당신의 이익을 얻을 것이다, boardSet에 대해서도 lazy='dynamic'을 사용할 수 있습니다, 예를 들어 싶습니다

dynamic - 속성은 에 대한 사전 구성된 Query 객체를 반환합니다. 모든 읽기 작업에는 결과를 반복하기 전에 추가 필터링 작업을 적용 할 수 있습니다.

물론
class User(...): 
    ... 
    boardSet = db.relationship('BoardSet', secondary=boardset_user_association_table, backref='user', lazy='dynamic') 

myuser = session.query(User).get(1) 
boardsets = myuser.boardSet.order_by(BoardSet.created) 

, 당신은 sorted(myuser.boardSet, key=lambda bs: bs.created)

+0

감사 만 간단하게 구입하고로드 된 후 .. 메모리에 또한 항목을 주문 내가 뭔가를 놓친 알고 쉽게 할 수 있습니다! – StefanE