首页 > 解决方案 > Flask-Admin 注册时设置默认用户角色

问题描述

我使用Flask-Admin制作仪表板,并为我的模型使用Flask-SQLAlchemy ,如下所示:

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):
    __tablename__ = 'role'
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)

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

我希望当用户注册Flask-Admin时,用户的默认角色已设置为client在此处输入图像描述

roles我在专栏上尝试过这样的事情:

roles = db.relationship('Role', secondary=roles_users,
                     backref=db.backref('users', lazy='dynamic'),
                     default='client') # or default=3 (which is '3' is the client id in roles_user association table.

但我收到了这条信息:

TypeError: relationship() got an unexpected keyword argument 'default'

我也尝试过这个解决方案 但现在为我工作。

那么,是否可以在用户注册时设置默认角色..?

注意:在另一种情况下,我在这里也提出了与这个问题非常相似的问题,但情况不同。我希望在我通过superuser创建新用户时设置角色,而不是在用户自己注册时设置角色。

标签: pythonflaskflask-sqlalchemyflask-admin

解决方案


我在应用程序初始化期间使用此代码:

@user_registered.connect_via(app)     
def user_registered_sighandler(app, user, confirm_token):               
    default_role = user_datastore.find_role("user")         
    user_datastore.add_role_to_user(user, default_role)            
    db.session.commit()

推荐阅读