【发布时间】:2019-10-22 06:58:34
【问题描述】:
在 Flask-SQLAlchemy 中,我定义了三个模型,如下所示:
class Account(db.Model):
__tablename__ = 'accounts'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64))
users = association_proxy('user_accounts', 'user')
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64))
accounts = association_proxy('user_accounts', 'account')
class Permission(db.Model):
__tablename__ = 'permissions'
account_id = db.Column(db.Integer, db.ForeignKey('accounts.id'), primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), primary_key=True)
role = db.Column(db.Integer)
account = db.relationship("Account", backref=backref('user_accounts
user = db.relationship("User", backref=backref('user_accounts'))
这些用于表达Account 和User 类之间的多对多关系,由Permission 控制。
目前,我可以执行以下操作:
# create initial records
a = Account()
u = User()
p = Permission()
p.account = a
p.user = u
db.session.add_all([a, u, p])
db.session.commit()
# get the list of accounts associated with a user
u.accounts
[<Account 1>]
# get the list of users associated with an account (same as above, just reverse)
a.users
[<User 1>]
但是,我无法获得用户在特定帐户中的确切角色。
基本上,我希望能够做到这一点:
a.users[0].role
... 以便能够找出此用户在特定帐户 a 上的角色。如果同一行针对不同的帐户运行,称为a2,我希望获得不同的角色(调用它的用户具有帐户a2 而不是a1 的任何角色)。
这甚至可以通过关系实现吗?或者,我应该直接遍历Permissions 以查找用户每次尝试访问帐户时的角色,因为这是数据库关系的反模式?
【问题讨论】:
标签: python flask sqlalchemy flask-sqlalchemy