sko*_*nos 7 python database database-design sqlalchemy flask-sqlalchemy
我有一个代表用户的模型,我想在表示他们是朋友的用户之间建立关系.我的功能模型与关联表和列出所有朋友的方法看起来像这样
friendship = db.Table('friend',
db.Column('id', db.Integer, primary_key=True),
db.Column('fk_user_from', db.Integer, db.ForeignKey('user.id'), nullable=False),
db.Column('fk_user_to', db.Integer, db.ForeignKey('user.id'), nullable=False)
)
class User(db.Model):
...
...
friends = db.relationship('User',
secondary=friendship,
primaryjoin=(friendship.c.fk_user_from==id),
secondaryjoin=(friendship.c.fk_user_to==id),
backref = db.backref('friend', lazy = 'dynamic'),
lazy = 'dynamic')
def list_friends(self):
friendship_union = db.select([
friendship.c.fk_user_from,
friendship.c.fk_user_to
]).union(
db.select([
friendship.c.fk_user_to,
friendship.c.fk_user_from]
)
).alias()
User.all_friends = db.relationship('User',
secondary=friendship_union,
primaryjoin=User.id==friendship_union.c.fk_user_from,
secondaryjoin=User.id==friendship_union.c.fk_user_to,
viewonly=True)
return self.all_friends
Run Code Online (Sandbox Code Playgroud)
问题是,我需要在确认之前实施询问友好状态和状态(就像你从Facebook上知道的那样)所以在附带的列中添加一个额外的列是必要的.根据SQLAlchemy教程,我应该创建一个关联对象但是如何让它再次自我引用?
或者是否可以将此列添加到我当前的frienship表中并以某种方式访问并更改状态值?
谢谢
您所需要做的就是在表中添加primaryjoin,并在“友谊”表中添加两个“ foreign_key”外键。您还需要与全班同学建立友谊。
class Friendship(db.Model):
__tablename__ = 'friend'
fk_user_from = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
fk_user_to = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True)
extra_field = db.Column(db.Integer)
class User (db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
user_to = db.relationship('Friendship',backref='to', primaryjoin=id==Friendship.fk_user_to)
user_from = db.relationship('Friendship',backref='from', primaryjoin=id==Friendship.fk_user_from )
Run Code Online (Sandbox Code Playgroud)
要添加朋友,您需要定义“友谊”,例如:
friend = Friendship(extra_field=0 , to=me , from=my_friend)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1622 次 |
| 最近记录: |