2012-07-18 77 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) 

我从用户对象项目的集合,但我无法对实际数据进行任何过滤等。我想,例如在某些情况下,从User.boardSet由值字段中创建

回答

1

好结果排序,你可以使用lazy='dynamic'boardSet,在这种情况下,你会得到的好处

dynamic - 该属性将返回所有读取操作的预先配置的查询对象,在迭代结果之前,可以应用进一步的过滤操作 。

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 2012-07-19 09:19:05