我使用 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'
我也尝试过此solution 但是现在为我工作。
那么,用户注册时是否可以设置默认角色??
注意:在另一种情况下,我也对此问题here提出了非常相似的要求,但情况有所不同。我希望在这里由 superuser 创建新用户时设置角色,而不是在用户自行注册时设置角色。
答案 0 :(得分:1)
我在应用初始化期间使用以下代码:
@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()
答案 1 :(得分:0)
我正在修改@gitter代码,因此这是我的案例的有效代码:
@user_registered.connect_via(app)
def user_registered_sighandler(app, user, confirm_token):
default_role = Role.query.filter_by(name='client').first()
user.roles.append(default_role)
db.session.commit()
感谢@gitter,您为我做到了一些见识。