在我一直致力于开发的应用程序中,使用 Flask-User 及其建议的授权控制模型。这是一个例子:
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
# User Authentication information
username = db.Column(db.String(50), nullable=False, unique=True)
password = db.Column(db.String(255), nullable=False, default='')
# User Email information
email = db.Column(db.String(255), nullable=False, unique=True)
confirmed_at = db.Column(db.DateTime())
# User information
is_enabled = db.Column(db.Boolean(), nullable=False, default=False)
# Relationships
roles = db.relationship('Role', secondary='user_roles',
backref=db.backref('users', lazy='dynamic'))
class Role(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(50), unique=True)
class UserRoles(db.Model):
id = db.Column(db.Integer(), primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('user.id', ondelete='CASCADE'))
role_id = db.Column(db.Integer(), db.ForeignKey('role.id', ondelete='CASCADE'))
此外,作为 Flask-User/Flask-Login 的一部分,current_user
给我一个 User
对象,对应于应用程序的当前用户(如果已登录) ) 并且,正如在我们的模型中定义的那样,current_user.roles
返回一个 Role
对象列表,对应于 UserRoles 绑定(bind)到当前用户的角色
表。
现在,在某个时候,我希望能够查询具有当前用户所具有的任何角色的所有用户。鉴于我们的 current_user.roles
列表和我在 SQL Alchemy 中的模型,如何实现这一点?如何选择所有 any
的 User.roles
匹配我们的 current_user.roles
的所有用户?
最佳答案
添加__repr__
到角色如下:
class Role(db.Model):
#...
def __repr__(self):
return self.id
您可以使用以下查询来实现您的要求。
User.query.filter(User.roles.any(Role.id.in_([role.id for role in current_user.roles]))).all()
关于python - Flask-SQLAlchemy 按关系属性查询记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43990869/