难以理解 Flask Mega Tutorial 中的一些 Flask-SQLAlchemy 内容.这是代码:
followers = db.Table('followers',
db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
)
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
nickname = db.Column(db.String(64), unique = True)
email = db.Column(db.String(120), index = True, unique = True)
role = db.Column(db.SmallInteger, default = ROLE_USER)
posts = db.relationship('Post', backref = 'author', lazy = 'dynamic')
about_me = db.Column(db.String(140))
last_seen = db.Column(db.DateTime)
followed = db.relationship('User',
secondary = followers,
primaryjoin = (followers.c.follower_id == id),
secondaryjoin = (followers.c.followed_id == id),
backref = db.backref('followers', lazy = 'dynamic'),
lazy = 'dynamic')
def follow(self, user):
if not self.is_following(user):
self.followed.append(user)
return self
def unfollow(self, user):
if self.is_following(user):
self.followed.remove(user)
return self
def is_following(self, user):
return self.followed.filter(followers.c.followed_id == user.id).count() > 0
所以我明白,因为这是一种自引用关系,我们需要某种方式让关联表确定表中的哪个用户是关注者,以及表中的哪个用户是被关注的用户。
Primaryjoin
和 secondaryjoin
做到这一点,但如何?关于
primaryjoin
我不明白的三件事和 secondaryjoin
如下面所述:primaryjoin
的目的是什么?和 secondaryjoin
检查平等?或者,换句话说,primaryjoin
到底是怎么回事?和 secondaryjoin
添加 user.id
s 到关联表? primaryjoin
和 secondaryjoin
拍下user.id
要求,其中 user.id
去哪里? 这些问题一直阻碍我进入下一章,因此非常感谢任何答案。
最佳答案
引用:SQLAlchemy documentation for specifying alternative join conditions (
primaryjoin
和 secondaryjoin
)。
关于flask - 'primaryjoin' 和 'secondaryjoin' 如何处理 SQLAlchemy 中的多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19598578/