flask web开发之关注者 自引用关系

记下对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)
希望这笔记也能帮助大家理清这段关系。。。



猜你喜欢

转载自blog.csdn.net/jiulixiang_88/article/details/80590141
今日推荐