我的Flask-Admin ModelView的__init__没有应用程序上下文 - 它什么时候通常会得到一个?

时间:2018-05-22 02:58:56

标签: python flask sqlalchemy flask-sqlalchemy flask-admin

我有一个工作示例Flask-Admin应用程序on GitHub,它查询视图(本身基于MySQL information_schema.TABLES),以便动态更新ModelView' {{1 }和column_labels属性。还有一个小模板修改,可以将工具提示添加到包含数据库中列注释的标题行。

我付出了很多努力来解决这个问题,因为当使用column_descriptions已经输入到数据库中时,重新输入我的Python代码中的列描述似乎很愚蠢表创建期间的SQL关键字。

在简单的测试应用程序中,一切都按预期工作;我收到了COMMENT model方法的sessionModelView参数,我使用__init__查询其他模型列标签/评论,在视图上更新sessionself.column_labels,然后调用self.column_descriptions

Animated GIF showing column tooltips

但是,在一个更复杂的应用中,当我尝试在super() RuntimeError: No application found. Either work inside a view function or push an application context方法中查询其他模型时,我会遇到可怕的ModelView。我会在演示应用程序和我的"真实"之间留下唯一明显的区别。应用程序是我导入在另一个__init__文件中实例化的SQLAlchemy对象,然后在我的.py中调用其init_app()以将其连接到Flask实例。

编辑:完全问题是什么; {**}}在Flask-SQLAlchemy Quickstart中演示的app.py实例在SQLAlchemy中得到了正确的Flask应用程序实例。当我使用__init__()时,我会收到db.init_app(app)错误。

我的问题是: Flask-Admin No application found在Flask应用程序上下文中何时开始存在?为什么ModelView与{{1}的情况不同? }}?有没有什么方法可以跟踪Flask应用程序的启动过程并挂钩到那个确切的时刻,以便我可以看到这里发生了什么?

以下是涉及的两个基本部分(完整来源for each在GitHub上,如上所述):

提供列"元数据的模型,"包括评论

import db from somewhere.py; db.init_app(app)

db = SQLAlchemy(app)在实例化时查询上述模型

# models.py
# [SQLALchemy imports and declaration of 'Base']
class ColumnProperty(Base):
    # this view is based on MySQL's 'information_schema.TABLES'
    __tablename__ = 'v_column_properties'

    parent_table = Column(String(64), primary_key=True)
    name = Column(String(64), primary_key=True)
    # [some fields elided]
    comment = Column(String(1024)) # type: str

1 个答案:

答案 0 :(得分:0)

我会覆盖render的{​​{1}}方法并将ModelView设置在那里。显然,您可以设置某种缓存机制来减少数据库查询的数量。

类似(完全未经测试) - 请注意在查询中使用column_descriptions

self.session