使用flask-admin的模块从使用一对多的模型中查询数据

时间:2019-06-18 13:50:15

标签: flask flask-sqlalchemy flask-admin

我想访问已登录用户的角色并将其显示在屏幕上,我目前正在使用flask-admin。

现在,对于数据库:

我为用户提供了以下代码:

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    *some columns*
    roles = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))

    def __str__(self):
        return self.email

以下为角色:

class Role(db.Model, RoleMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))

    def __str__(self):
        return self.name

以及它们的外来值表:

roles_users = db.Table(
    'roles_users',
    db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
    db.Column('role_id', db.Integer(), db.ForeignKey('role.id'))
)

现在我已经尝试过get itemselect by index,但是没有用。因此,我猜想还有一种使用SQLAlchemy来选择我的值的“简单方法”,但是有没有例子?

1 个答案:

答案 0 :(得分:0)

SQLAlchemy允许您通过原始对象的属性访问相关对象。
要获取与用户关联的所有角色的列表,

roles = logged_in_user.roles.all()

要获得特定角色,

role = logged_in_user.roles.first()

或者也许

role = logged_in_user.roles.filter_by(prop="val")

编辑
首先通过SQLAlchemy查询获得所需的user对象,然后从roles
读取user属性 请尝试以下操作:

def get_role():  
    username = session['username']
    with session_scope() as s:
        logged_in_user = s.query(admin.User).filter_by(username=username).first()
        return logged_in_user.roles