Flask-SQLAlchemy按关系属性查询记录

Gab*_*ira 1 python sqlalchemy flask flask-sqlalchemy

在我一直在研究的应用程序中,使用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'))
Run Code Online (Sandbox Code Playgroud)

另外,作为Flask-User / Flask-Login的一部分,current_user给我一个User对应于应用程序当前用户的对象(如果已登录),并按照我们的模型中的定义,current_user.roles返回Role与角色对应的对象列表该表已绑定到当前用户UserRoles

现在,在某个时候,我希望能够查询具有当前用户所具有的任何角色的所有用户。鉴于我们的current_user.roles清单和我在SQL Alchemy中的模型,该如何实现?我如何可以选择所有用户,其中,any它的User.roles比赛我们任何的current_user.roles

sta*_*mer 5

添加__repr__到角色如下:

class Role(db.Model):

    #...

    def __repr__(self):

        return self.id
Run Code Online (Sandbox Code Playgroud)

您可以使用以下查询来满足您的要求。

User.query.filter(User.roles.any(Role.id.in_([role.id for role in current_user.roles]))).all()
Run Code Online (Sandbox Code Playgroud)