我与自己有多对多的关系,这意味着,我的模型是用户,一个字段是朋友,这将是用户。我已经完成了关系,但是当我尝试为用户的朋友进行查询时,我的问题就来了。我的模型和关系看起来像这样:
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')
从de视图来看,如果我想进行查询,我已经尝试了一些东西
friends_list = Monkey.query.join(Monkey.friends).filter(Monkey.id == user.id).all()
这不起作用......请帮忙吗?谢谢!
答案 0 :(得分:0)
您不需要自己创建连接。
更改lazy ='加入' - 项目将在与父母相同的查询中“热切地”加载。
当你获得对象猴子时,你已经可以访问朋友了
monkey = session.query(Monkey).get(user.id)
friends_list = monkey.friends