使用 flask-sqlalchemy 只做一个 BestFriend
Make only one BestFriend with flask-sqlalchemy
我有一个可以交朋友和最好朋友的应用程序现在我希望每个用户只有一个最好的朋友,所以应该定义另一个函数/我使用了 flask-sqlalchemy 和多对多关系?有什么建议吗?谢谢
model.py:
friends = db.Table('friends',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('user.id'))
)
best_friend = db.Table('best_friend',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('user.id'))
)
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(50), index=True, unique= True)
email = db.Column(db.String(50),index=True, unique= True)
bestfriend = db.relationship('User',
secondary = best_friend,
primaryjoin = (best_friend.c.user_id == id),
secondaryjoin = (best_friend.c.friend_id == id),
backref = db.backref('best_friend', lazy = 'dynamic'),
lazy = 'dynamic'
)
def are_bestfriends(self, user):
return self.is_bestfriend.filter(best_friend.c.friend_id == user.id).count()> 0
def be_bestfriend(self, user):
if not self.are_bestfriends(user):
self.bestfriend.append(user)
user.bestfriend.append(self)
return self
要将多对多关系更改为一对一关系,请先删除 best_friends
table。
friends = db.Table('friends',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('user.id'))
)
然后您想要向 User
添加一个引用另一个 User
的外键。
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(50), index=True, unique= True)
email = db.Column(db.String(50),index=True, unique= True)
bestfriend_id = db.Column(db.Integer, db.ForeignKey('user.id'))
bestfriend = db.relationship('User', remote_side=['id'], lazy='dynamic')
def are_bestfriends(self, user):
return self.best_friend == user
def be_bestfriend(self, user):
if not self.are_bestfriends(user):
self.bestfriend = user
user.bestfriend = self
return self
我有一个可以交朋友和最好朋友的应用程序现在我希望每个用户只有一个最好的朋友,所以应该定义另一个函数/我使用了 flask-sqlalchemy 和多对多关系?有什么建议吗?谢谢
model.py:
friends = db.Table('friends',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('user.id'))
)
best_friend = db.Table('best_friend',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('user.id'))
)
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(50), index=True, unique= True)
email = db.Column(db.String(50),index=True, unique= True)
bestfriend = db.relationship('User',
secondary = best_friend,
primaryjoin = (best_friend.c.user_id == id),
secondaryjoin = (best_friend.c.friend_id == id),
backref = db.backref('best_friend', lazy = 'dynamic'),
lazy = 'dynamic'
)
def are_bestfriends(self, user):
return self.is_bestfriend.filter(best_friend.c.friend_id == user.id).count()> 0
def be_bestfriend(self, user):
if not self.are_bestfriends(user):
self.bestfriend.append(user)
user.bestfriend.append(self)
return self
要将多对多关系更改为一对一关系,请先删除 best_friends
table。
friends = db.Table('friends',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('friend_id', db.Integer, db.ForeignKey('user.id'))
)
然后您想要向 User
添加一个引用另一个 User
的外键。
class User(db.Model):
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(50), index=True, unique= True)
email = db.Column(db.String(50),index=True, unique= True)
bestfriend_id = db.Column(db.Integer, db.ForeignKey('user.id'))
bestfriend = db.relationship('User', remote_side=['id'], lazy='dynamic')
def are_bestfriends(self, user):
return self.best_friend == user
def be_bestfriend(self, user):
if not self.are_bestfriends(user):
self.bestfriend = user
user.bestfriend = self
return self