在Flask-Admin中显示角色与用户的关系,可以通过以下步骤实现:
admin.add_view()
方法,分别注册角色和用户模型,以便在后台管理界面中显示和编辑这些模型的数据。ModelView
类的get_list
方法,查询关联表中的数据,并将其展示在角色或用户的详情页中。以下是一个示例代码:
from flask_admin.contrib.sqla import ModelView
from flask_admin import Admin
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'your_database_uri'
db = SQLAlchemy(app)
admin = Admin(app)
# 创建角色模型
class Role(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), unique=True)
description = db.Column(db.String(200))
# 创建用户模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))
email = db.Column(db.String(100), unique=True)
password = db.Column(db.String(100))
role_id = db.Column(db.Integer, db.ForeignKey('role.id'))
role = db.relationship('Role', backref=db.backref('users', lazy='dynamic'))
# 创建关联表
user_role = db.Table('user_role',
db.Column('user_id', db.Integer, db.ForeignKey('user.id')),
db.Column('role_id', db.Integer, db.ForeignKey('role.id'))
)
# 注册模型到Flask-Admin
admin.add_view(ModelView(Role, db.session))
admin.add_view(ModelView(User, db.session))
# 自定义视图
class CustomModelView(ModelView):
def get_list(self, page, sort_column, sort_desc, search, filters, execute=True, page_size=None):
# 查询关联表中的数据
query = db.session.query(User, Role).join(user_role).join(Role)
return super(CustomModelView, self).get_list(page, sort_column, sort_desc, search, filters, execute, page_size)
# 注册自定义视图
admin.add_view(CustomModelView(User, db.session))
if __name__ == '__main__':
app.run()
在上述代码中,首先创建了角色(Role)和用户(User)的数据库模型,并且通过外键和关联表建立了它们之间的关系。然后使用admin.add_view()
方法将这两个模型注册到Flask-Admin中。最后,创建了一个自定义的视图CustomModelView
,重写了get_list
方法来查询关联表中的数据,并将其展示在角色或用户的详情页中。
请注意,上述代码中的your_database_uri
需要替换为实际的数据库连接URI。另外,还可以根据具体需求对模型和视图进行进一步的定制和优化。
推荐的腾讯云相关产品:腾讯云数据库MySQL、腾讯云云服务器CVM、腾讯云对象存储COS等。你可以访问腾讯云官网了解更多产品信息和文档:腾讯云。
领取专属 10元无门槛券
手把手带您无忧上云