Использование модуля flask-admin для запроса данных из модели, использующей один-ко-многим - PullRequest
0 голосов
/ 18 июня 2019

Я хочу получить доступ к роли вошедшего в систему пользователя и отобразить ее на экране, и в настоящее время я использую 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 item и select by index, но это не сработало. Итак, я предполагаю, что есть более простой способ выбора значений с помощью SQLAlchemy, но есть ли примеры?

1 Ответ

0 голосов
/ 18 июня 2019

SQLAlchemy позволяет получить доступ к связанным объектам через свойства исходного объекта.
Чтобы получить список всех ролей, связанных с пользователем,

roles = logged_in_user.roles.all()

Чтобы получить определенную роль,

role = logged_in_user.roles.first()

или, возможно,

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

EDIT
Сначала получите нужный объект user с помощью запроса SQLAlchemy, затем прочитайте свойство 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
...