繁体   English   中英

使用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删除best_friends表。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM