修改Flask Admin中的列表模板

1 投票
1 回答
1323 浏览
提问于 2025-04-20 17:28

我正在使用Flask和Flask-Admin这个扩展。我有两个模型(使用SQLAlchemy):

  • 项目(Project)
  • 任务(Task)

项目有一个属性:

tasks = db.relationship('Task', backref=db.backref('project'))

而任务是一个自引用的树形结构,任务模型中的关键列是:

children = db.relationship("Task",

       # cascade deletions
       cascade="all, delete-orphan",

       # many to one + adjacency list - remote_side
       # is required to reference the 'remote'
       # column in the join condition.
       backref=db.backref("parent", remote_side=id),

       # children will be represented as a dictionary
       # on the "title" attribute.
       collection_class=attribute_mapped_collection('title'),
       )

我想在Flask-Admin中创建一个列表模板,显示所有的项目。这可以通过这个扩展和标准的列表视图轻松实现。但现在我想为每个项目添加一个CRUD界面(例如:http://examples.flask-admin.org/sqla/simple/admin/userview/),这个界面应该在点击某个项目时显示出该项目的任务。

我不知道实现这个目标的最佳方法是什么。我考虑过在每个项目行的表格单元格中包含一个iframe来显示任务,但这样看起来有点别扭。我该如何在项目列表模板中渲染与项目相关的任务的CRUD界面呢?

我知道Flask-Admin能够通过模型中的外键将这两个表连接起来,但标准的方法并不是我想要的,因为从项目的CRUD界面到任务的CRUD界面至少需要点击一次。我希望在同一页面上加载这两个CRUD界面。

1 个回答

2

根据文档来看,这个操作其实很简单,只需要给你的 Project 模型视图添加一个叫做 inline-models 的类属性就可以了:

class ProjectModelView(ModelView):
    inline_models = (Task, )

撰写回答