2014-05-05 85 views
1

我有一個多對多的關係,這意味着,我的模型是用戶和一個字段是朋友,這將是用戶。我已經完成了它的關係,但是當我嘗試爲用戶的朋友進行查詢時,我的問題就出現了。我的模型和關係是這樣的:Flask-SQLAlchemy在多對多的自我關係查詢

friendship = db.Table('friends', 
Column('friend_id', db.Integer, db.ForeignKey('monkeys.id')), 
Column('myfriend_id', db.Integer, db.ForeignKey('monkeys.id')) 
) 

class Monkey (db.Model): 
    _tablename__ = "monkeys" 

    id = Column(Integer, primary_key=True) 
    username = Column(String(50), unique = True) 
    email = Column(String(120), unique = True) 
    password = Column(String(50)) 
    date = Column (DateTime(), default=datetime.now()) 

    friends = relationship('Monkey', 
      secondary = friendship, 
      primaryjoin = (friendship.c.friend_id == id), 
      secondaryjoin = (friendship.c.myfriend_id == id), 
      backref = backref('friendship', lazy = 'dynamic'), 
      lazy = 'dynamic') 

而且從德認爲,如果我想要做的查詢,我已經試過的東西

friends_list = Monkey.query.join(Monkey.friends).filter(Monkey.id == user.id).all() 

卜它不工作...任何請幫助?謝謝!

回答

0

您不需要自己創建連接。

更改lazy ='joined' - 項目將「熱切」加載到與父項相同的查詢中。

,當你得到對象猴子,你已經用上了朋友

monkey = session.query(Monkey).get(user.id) 

friends_list = monkey.friends 
+0

但我想使用其他功能在查詢中,爲「分頁」和「ORDER_BY」,它不與呼叫 – alvgarvilla

+0

你工作之前沒有提到這個:)。 而不是使用'友誼= db.Table()'創建'類友誼(db.Model):'。 這在sqlalchemy [documentation](http://docs.sqlalchemy.org/en/rel_0_8/orm/relationships.html#association-object) – qwetty

+0

中解釋,然後通過'friends = session.query(Friendship ).filter(Friendship.friend_id == user.id).all()' – qwetty