下面回到首页中,使用一个账户登录,你肯定已经注意到了这里的内容:
没错,现在都是写死的一些固定信息,其中分享数量很容易就可以获取,只需要修改首页模板:
<p class="text-muted">我已经分享<span class="text-danger">{{ current_user.posts.count() }}</span>条心情</p>
这样就可以显示,但是关注和被关注显然就不是这么简单了,首先要思考一下,一个人可以关注多个用户,而一个用户也可以被多个人关注,所以,这很明显是一个多对多的关系,而同时,无论是关注用户还是被别人关注,显然都是针对的用户表,所以,这是一个典型的单表自关联的多对多关系,而多对多就需要使用关联表进行连接,下面创建一个关联表(models/Follow.py):
from .. import dbfrom datetime import datetimeclass Follow(db.Model): __tablename__="follows" follorer_id=db.Column(db.Integer,db.ForeignKey("users.id"),primary_key=True) follored_id=db.Column(db.Integer,db.ForeignKey("users.id"),primary_key=True) createtime=db.Column(db.DateTime,default=datetime.utcnow)
然而这时候,SQLAlchemy框架是无法直接使用的,如果要使用这个关联表,需要把它拆解为两个标准的一对多关系(User.py):
#关注我的followers = db.relationship("Follow",foreign_keys=[Follow.followed_id],backref=db.backref("followed",lazy='joined'),lazy="dynamic",cascade="all,delete-orphan")#我关注的followed = db.relationship("Follow", foreign_keys=[Follow.follower_id], backref=db.backref("follower", lazy='joined'), lazy="dynamic",cascade="all,delete-orphan")
看到这个,有必要解释一下了:
foreign_keys很明显是表示外键,因为followers和followed都是与Follow表进行关联,为了消除歧义,必须使用foreign指定特定外键。
backref的作用是回引Follow模型,即即可从用户查询F