动态模型视图

时间:2015-10-14 19:34:29

标签: flask flask-sqlalchemy flask-admin

我尝试使用Flask-Admin来可视化我的数据库表。 但是,用户可以随时创建和删除表,因此我需要实现以下目标之一:

  1. 每次用户刷新页面时实例化的模型视图(基于索引其他表的表)。 这对我来说不起作用,错误表明在初始化应用程序后无法添加ModelViews。

  2. ModelView,用户可以从下拉列表中选择数据库表(基于索引其他表的表),这会更改ModelView的基础Model对象。 但是,我不知道该怎么做。

  3. 最好的方法是什么/如何实现其中之一?

1 个答案:

答案 0 :(得分:-1)

我认为您的第二个选项可能有可能实施。例如,在Flask-Admin中,您可以创建

from flask import Flask
from flask.ext.admin import Admin, BaseView, expose

class MyView(BaseView):
    @expose('/')
    def index(self):
        return self.render('index.html')

app = Flask(__name__)

admin = Admin(app)
admin.add_view(MyView(name='Hello 1', endpoint='test1', category='Test'))
admin.add_view(MyView(name='Hello 2', endpoint='test2', category='Test'))
admin.add_view(MyView(name='Hello 3', endpoint='test3', category='Test'))
app.run()

为您提供包含多个视图的下拉菜单。您可以将MyView实例化为ModelView并动态迭代表。即

from flask import Flask
from flask.ext.admin import Admin, BaseView, expose

class MyView(ModelView):
    # Disable model creation
    can_create = False

    # Override displayed fields
    column_list = ('field1', 'field2')

    def __init__(self, session, **kwargs):
        # If tables model is the same, otherwise, you need
        # to generate ``TableModel`` dynamically
        super(MyView, self).__init__(TableModel, session, **kwargs)


app = Flask(__name__)

admin = Admin(app)
for index, name, endpoint in get_dynamic_table_datalist(): 
    admin.add_view(MyView(session=db.session, name=name,
                   endpoint=endpoint, category='Tables'))
app.run()

希望这会有所帮助。干杯..