如何在Flask中为新用户分配角色 - TypeError:__ init __()只需1个参数(3个给定)

时间:2015-10-19 23:27:02

标签: python flask sqlalchemy flask-sqlalchemy flask-login

我想在用户注册Flask之后为用户分配角色(使用flask.ext.user)。

我按照https://pythonhosted.org/Flask-User/roles_required_app.html#create-roles-required-app-py

定义UserRoles和角色

但是当我尝试在用户注册后自动添加角色时:

@user_registered.connect_via(app)
def _after_reg_hook(sender, user, **extra):
    new_role = UserRoles(user.id,1)

我收到以下错误:

TypeError: __init__() takes exactly 1 argument (3 given)

不幸的是,doco示例(上面链接的)没有提供在注册后添加角色的实用方法,因此不确定出现了什么问题。

1 个答案:

答案 0 :(得分:3)

SQLAlchemy提供了一个默认构造函数,它将命名的参数分配给相应的属性。你传递了位置参数。

UserRoles(user_id=user.id, role_id=1)

但是,你不应该直接实例化一个关联,事实上这个例子有点误导,因为在这种情况下没有理由为关联定义一个完整的模型,因为你'不与关联存储任何其他数据。

而是直接将Role分配给roles上的User集合(或users上的Role集合)。请注意,在创建重复角色时不会检查,您应该遵循unique object配方。