我有一个工作示例Flask-Admin应用程序on GitHub,它查询视图(本身基于MySQL information_schema.TABLES
),以便动态更新ModelView' {{1 }和column_labels
属性。还有一个小模板修改,可以将工具提示添加到包含数据库中列注释的标题行。
我付出了很多努力来解决这个问题,因为当使用column_descriptions
将已经输入到数据库中时,重新输入我的Python代码中的列描述似乎很愚蠢表创建期间的SQL关键字。
在简单的测试应用程序中,一切都按预期工作;我收到了COMMENT
model
方法的session
和ModelView
参数,我使用__init__
查询其他模型列标签/评论,在视图上更新session
和self.column_labels
,然后调用self.column_descriptions
。
但是,在一个更复杂的应用中,当我尝试在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
答案 0 :(得分:0)
我会覆盖render
的{{1}}方法并将ModelView
设置在那里。显然,您可以设置某种缓存机制来减少数据库查询的数量。
类似(完全未经测试) - 请注意在查询中使用column_descriptions
:
self.session