2017-04-19 7 views
1

これはflask-admin exampleに基づいています。フラスコ - sqlalchemy:どのように自分の役割のIDに応じてユーザーを選択する選択可能なボタンを作るには?

すべてのユーザーではなく、ロールIDに基づいてデータベース内のユーザーを選択するための選択可能なドロップボタンを作成します。例えば

スーパーユーザ(ロールID = 2)を言って、どのように私は、ユーザーのみが(私のclass Projectに)スーパーユーザを選択することができますされている制限選択ボタンを作ることができますか?

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')) 
) 


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

    def __str__(self): 
     return self.name 

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

    def __str__(self): 
     return self.email 

class Project(db.Model): 
     *some code here make the selectable button to select users that are superusers* 

役割テーブル:

enter image description here

ロール - ユーザテーブル:

enter image description here

enter image description here

答えて

2

UserモデルはRoleモデルと多対多関係を定義します。この関係を使用して、ユーザーをロールIDで照会することができます。

users = User.query.join(User.roles).filter(Role.id == 123).all() 

また、あなたはRole最初に照会して、役割のユーザーをアクセスするためにusers属性を使用することができます。あなたは= `User.queryをユーザーを追加することを意味します、返事をありがとう:augurar @

+0

role = Role.query.get(123) users = role.users 

詳細については、SQLAlchemyのドキュメントを参照してください.join(User.roles).filter(Role.id == 123).all() 'ここのクラスプロジェクトでは? 'sqlalchemy.exc.InvalidRequestError:マッパーMapper | User |ユーザーを初期化する際、式 'Project'が名前を見つけられませんでした(" name 'Project'が定義されていません)。 – Samoth

+0

コードスニペットは、クエリの作成方法を示しています。どのようにそれらを使用するかはあなた次第です。エラーをデバッグするのに役立つ場合は、[MCVE](https://stackoverflow.com/help/mcve)を作成し、新しい質問を投稿する必要があります。 – augurar

+0

@ augurar:あなたの優しい答えをありがとう、 'Role.id == 123'と' Team.id == current_user.team_id'でユーザに質問したいのですが? – Samoth