如何将 flask-sqlalchemy 的 db.Table 添加到 flask-admin?
how to add db.Table of flask-sqlalchemy to flask-admin?
当 flask-security
与 flask-admin
集成时,flask-security
需要创建一个名为 roles_users
且 db.Table
为 [=18] 的 table =]:
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基于flask-sqlalchemy
的db.Model
可以注册到flask-admin
如下:
admin.add_view(ModelView(User, db.session))
查了flask-sqlalchemy
的出处,没搞清楚db.Table
和db.Model
的关系
我想知道的是如何将roles_users
注册到flask-admin
。
通常您不需要添加用户角色连接 table。将用户和角色添加为单独的视图,但在用户视图中包括角色关系。例如:
给定以下两个模型和table:
class Role(db.Model, RoleMixin):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(length=64), unique=True)
description = db.Column(db.Unicode(length=255), nullable=True)
def __unicode__(self):
return u"{name} ({role})".format(name=self.name, role=self.description or 'Role')
user_to_role = db.Table('user_to_role',
db.Column('user_id', db.Integer(), db.ForeignKey('users.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('roles.id')))
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.Unicode(length=255), nullable=False)
last_name = db.Column(db.Unicode(length=255), nullable=False)
email = db.Column(db.Unicode(length=254), unique=True, nullable=True)
password = db.Column(db.Unicode(length=255), nullable=False)
active = db.Column(db.Boolean(), default=False)
roles = db.relationship('Role', secondary=user_to_role, backref=db.backref('users', lazy='select'))
def __unicode__(self):
return u"{first_name} ({last_name})".format(first_name=self.first_name, last_name=self.last_name)
使用这两个视图(Flask-Admin 1.4):
class UserView(ModelView):
can_view_details = True
column_list = ['first_name', 'last_name', 'email', 'roles', 'active']
column_default_sort = ('last_name', False)
column_filters = [
'first_name',
'last_name',
'email',
'active',
'roles.name',
]
column_details_list = [
'first_name', 'last_name', 'email', 'active', 'roles',
'confirmed_at', 'last_login_at', 'current_login_at', 'last_login_ip', 'current_login_ip', 'login_count',
]
form_columns = [
'first_name', 'last_name', 'email', 'active', 'roles',
]
class RoleView(ModelView):
column_list = ['name', 'description']
form_columns = ['name', 'description']
当 flask-security
与 flask-admin
集成时,flask-security
需要创建一个名为 roles_users
且 db.Table
为 [=18] 的 table =]:
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基于flask-sqlalchemy
的db.Model
可以注册到flask-admin
如下:
admin.add_view(ModelView(User, db.session))
查了flask-sqlalchemy
的出处,没搞清楚db.Table
和db.Model
我想知道的是如何将roles_users
注册到flask-admin
。
通常您不需要添加用户角色连接 table。将用户和角色添加为单独的视图,但在用户视图中包括角色关系。例如:
给定以下两个模型和table:
class Role(db.Model, RoleMixin):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(length=64), unique=True)
description = db.Column(db.Unicode(length=255), nullable=True)
def __unicode__(self):
return u"{name} ({role})".format(name=self.name, role=self.description or 'Role')
user_to_role = db.Table('user_to_role',
db.Column('user_id', db.Integer(), db.ForeignKey('users.id')),
db.Column('role_id', db.Integer(), db.ForeignKey('roles.id')))
class User(db.Model, UserMixin):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.Unicode(length=255), nullable=False)
last_name = db.Column(db.Unicode(length=255), nullable=False)
email = db.Column(db.Unicode(length=254), unique=True, nullable=True)
password = db.Column(db.Unicode(length=255), nullable=False)
active = db.Column(db.Boolean(), default=False)
roles = db.relationship('Role', secondary=user_to_role, backref=db.backref('users', lazy='select'))
def __unicode__(self):
return u"{first_name} ({last_name})".format(first_name=self.first_name, last_name=self.last_name)
使用这两个视图(Flask-Admin 1.4):
class UserView(ModelView):
can_view_details = True
column_list = ['first_name', 'last_name', 'email', 'roles', 'active']
column_default_sort = ('last_name', False)
column_filters = [
'first_name',
'last_name',
'email',
'active',
'roles.name',
]
column_details_list = [
'first_name', 'last_name', 'email', 'active', 'roles',
'confirmed_at', 'last_login_at', 'current_login_at', 'last_login_ip', 'current_login_ip', 'login_count',
]
form_columns = [
'first_name', 'last_name', 'email', 'active', 'roles',
]
class RoleView(ModelView):
column_list = ['name', 'description']
form_columns = ['name', 'description']