2015-10-14 73 views
0

我正在尝试使用Flask-Admin来可视化我的数据库表。 但是,可以创建并在任何时候用户删除的表,所以我需要实现以下之一: Dynamic ModelViews

  1. 已实例在用户每次刷新页面时Modelviews(基于

    上表索引其他表)。 这对我来说不起作用,并显示一个错误,指示应用程序初始化后ModelViews无法添加。

  2. ModelView中用户可以从下拉列表中选择数据库表(基于索引其他表的表),它更改了ModelView的底层Model对象。 但是,我不知道如何去做这件事。

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

回答

0

我认为你的第二个选项可能有一个可能的实现。例如,在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() 

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

+0

不幸的是,这不允许用户在执行'app.run()'后创建/删除表格。 如果我将'admin.add_view()'方法移动到'app.run()'之后,瓶子将引发一个异常,说明应用程序初始化后无法添加视图。 – Rafael