我正在尝试创建一个关联对象UserRelationship
,它定义了User
和User
之间的“跟随”关系
class UserRelationship(db.Model):
id = db.Column(db.Integer, primary_key=True)
follows_id = db.Column(db.Integer, db.ForeignKey('user.id'))
follower_id = db.Column(db.Integer, db.ForeignKey('user.id'))
follows = db.relationship("User", foreign_keys=[follows_id])
follower = db.relationship("User", foreign_keys=[follower_id])
bank = db.Column(db.Float)
def __repr__(self):
return f'{self.follower.username} follows {self.follows.username} with {self.bank}'
class User(UserMixin, db.Model):
follows = db.relationship('UserRelationship',
primaryjoin=(UserRelationship.follower_id == id),
backref=db.backref('followers'),
lazy='dynamic')
def follow(self, user, bank):
if not self.is_following(user):
new_follow = UserRelationship(bank=bank)
new_follow.follows = user
self.follows.append(new_follow)
db.session.commit()
return new_follow
def unfollow(self, user):
if self.is_following(user):
relationship = self.follows.filter(UserRelationship.follows == user).first()
db.session.delete(relationship)
db.session.commit()
return self.follows.all()
def is_following(self, user):
return self.follows.filter(
UserRelationship.follows == user).count() > 0
这将在shell中产生预期的结果:
joe=User(username='joe')
paul=User(username='paul')
phil=User(username='phil')
phil.follow(joe,bank=123)
[phil follows joe with 123]
因此,当我user.follows时,我会被带到一个UserRelationship对象,我可以查询该对象以获得该用户跟踪的所有人。我明白了。我不明白的是如何让User.followers工作。我想要的是一个查询(或列表)或User.followers。backref命令无效=在控制台中键入'phil.followers'
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'User' object has no attribute 'followers'
我也许可以写一个函数?但我不完全确定我将编写什么来查询数据库,以获得所有跟踪某个特定用户的用户列表
我想出来了——其实很简单:
相关问题 更多 >
编程相关推荐