记下对flask web开发书中的第12章 关注者模型的理解,以后不用见一次晕一次
首先,关注者与被关注者之间是多对多的关系,一个关注者同时也是被关注者。多对多关系模型需要引入关联表
为了便于理解,我们可以认为用户有100人,那我们人为划分为两帮人,其中50人只能去关注,用表usersa表示,另50人只能被关注,用表usersb表示。
关联表中follower_id代表只能去关注别人的那帮人,followed_id代表只能被关注的那帮人。关联表模型如下:
class Follow(db.Model): __tablename__ = 'follows' #users to follow others follower_id = db.Column(db.Integer, db.ForeignKey('usersa.id'), primary_key=True) #users to be followed followed_id = db.Column(db.Integer, db.ForeignKey('usersb.id'), primary_key=True)
只具有关注的权限usersa的模型如下:
class User(db.Model): ''' someone to follow others ''' __tablename__='usersa' followed = db.relationship('Follow', foreign_keys=[Follow.follower_id], backref=db.backref('follower',lazy='joined'), lazy='dynamic')followed代表此关注别人的用户都关注了usersb中的哪些人,backref则在Follow模型中定义follower属性,代表这个有关注权限的人是usersa中的谁
只具有被关注权限的usersb的模型如下:
class User(db.Model): ''' someone to be followed ''' __tablename__='usersb' follower = db.relationship('Follow', foreign_keys=[Follow.followed_id], backref=db.backref('followed', lazy='joined'), lazy='dynamic')follower代表此被关注者在usersa中都有哪些人关注他,backref则在Follow模型中定义followed属性,代表这个被关注者是usersb中的谁
而在现实中这100个用户权限是平等的,关注者同时也是被关注者,即usersa usersb其实是没有区别的,此时,User的关系模型则将上面合并,也就是书上的:
class User(db.Model): ''' someone to follow others ''' __tablename__='users' followed = db.relationship('Follow', foreign_keys=[Follow.follower_id], backref=db.backref('follower',lazy='joined'), lazy='dynamic') follower = db.relationship('Follow', foreign_keys=[Follow.followed_id], backref=db.backref('followed', lazy='joined'), lazy='dynamic')
而Follow模型是这样:
class Follow(db.Model): __tablename__ = 'follows' #users to follow others follower_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True) #users to be followed followed_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)希望这笔记也能帮助大家理清这段关系。。。