В 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
, чтобы определить, какую роль играет пользователь каждый раз, когда он пытается получить доступ к учетной записи, потому что это анти-шаблон для отношений с базой данных?