我正在使用 Flask-Admin 管理我的CRUD。 我的应用程序中有三个角色,分别是超级用户,操作员和客户端。
在此应用中,操作员必须要求超级用户注册其帐户,更改其数据及其他信息。
但是对于没有编号的客户,我希望他们可以注册自己的帐户或自己编辑帐户信息。
目前,客户端可以自己注册,但是现在我希望客户端可以通过超级用户单独编辑其信息。
到目前为止,我只能由超级用户编辑帐户信息,如以下屏幕截图所示:
所以现在,我希望客户可以自己编辑他们的姓名,电子邮件,密码或其他信息,还可以与其他客户分开数据。
这是我的模特的片段:
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)
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True)
password = db.Column(db.String(255))
roles = db.relationship('Role', secondary=roles_users,
backref=db.backref('users', lazy='dynamic'))
class Operator(User):
__tablename__ = 'operator'
id = db.Column(db.Integer(), primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
class Client(User):
__tablename__ = 'client'
id = db.Column(db.Integer(), primary_key=True)
user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
那么,如何使用 Flask-Admin ..?
答案 0 :(得分:1)
Flask-Security带有内置表单,并可以查看密码更改。我建议使用它。 https://pythonhosted.org/Flask-Security/customizing.html
要通过Flask-Admin视图编辑用户信息,您可以执行以下操作来覆盖这些方法。不要忘记在flask-admin User类中添加“客户端”作为接受角色。 自定义过滤器必须根据current_user_id进行过滤,因此无法编辑其他用户配置文件。
def get_query(self)
if "superuser" in current_user.roles:
return self.session.query(self.model) # as original source code
else: # for all other roles
return self.session.query(self.model).filter(
< insert custom filter here> )
def get_count_query(self):
if "superuser" in current_user.roles:
return self.session.query(func.count('*')).select_from(self.model) # as original source code
else: # for all other roles
return self.session.query(func.count('*')).filter(
<insert custom filter here> )
另一种解决方案是构建一个自定义视图(不使用flask-admin),并将其命名为/ myprofile。